文章目录
  1. 1. 场景一 避免重复发送请求
  2. 2. 场景二 跳出当前控制器,停止网络请求

场景一 避免重复发送请求

判断是否是同一次请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 发送请求给服务器, 加载右侧的数据
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"list";
params[@"c"] = @"subscribe";
params[@"categoryzz_id"] = @(c.id);
[[AFHTTPSessionManager manager] GET:@"http://api.budejie.com/api/api_open.php" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
// 字典数组 -> 模型数组
NSArray *users = [XMGRecommendUser objectArrayWithKeyValuesArray:responseObject[@"list"]];

// 添加到当前类别对应的用户数组中
[c.users addObjectsFromArray:users];

// 刷新右边的表格
[self.userTableView reloadData];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
XMGLog(@"%@", error);
}];
}

以上代码来自小码哥

1 使用场景 上次请求未完成,又加载下次请求

  • 请求设置变量来存储parmas,比较完成后success block中的params变量是否一致,因为success中的params是保存的发送请求时的params。

截取部分代码示意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  params[@"a"] = @"list";
params[@"c"] = @"subscribe";
params[@"categoryzz_id"] = @(c.id);
self.params = params;//最后一次请求参数
[[AFHTTPSessionManager manager] GET:@"http://api.budejie.com/api/api_open.php" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
1. 判断是否是同一次请求
2. if(self.params ==params) return;
//因为来到这,已经是取得请求成功,不保存数据是浪费用户流量
// 字典数组 -> 模型数组
NSArray *users = [XMGRecommendUser objectArrayWithKeyValuesArray:responseObject[@"list"]];

// 添加到当前类别对应的用户数组中
[c.users addObjectsFromArray:users];
1.即使是两次不同的请求,保存数据不刷新表格
2. if(self.params ==params) return;
// 刷新右边的表格
[self.userTableView reloadData];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
XMGLog(@"%@", error);
}];

场景二 跳出当前控制器,停止网络请求

[AFHTTPSessionManager manager]升级为属性

1
2
3
4
5
6
7
@protray (noticmoc , strong) AFHTTPSessionManager *manager;


- (void)delloc {
// 停止所有操作 也可以拿到task对象cancel 来取消网络请求
[self.manager.operationQueue cancelAllOperations];
}
文章目录
  1. 1. 场景一 避免重复发送请求
  2. 2. 场景二 跳出当前控制器,停止网络请求