AFNetWorking退出控制器取消网络请求
通过AFN来做网络请求,有可能在网络比较慢的时候,请求结果还没回来,但是此时用户已经退出了这个控制器,也就是说这个控制器已经被销毁了,但是请求还在继续,当网络请求结果回来以后,在请求成功和失败的Block里面都会调用self(也就是销毁的那个控制器)的一些方法,但是控制器已经被销毁了,这个时候就会Crash,所以为了防止这种情况,就要在控制器销毁的时候把正在进行的网络请求全部取消掉,这样就不会继续进行请求了。
/** AFN请求管理者 */
@property(nonatomic,strong)AFHTTPSessionManager *manager;
- (AFHTTPSessionManager*)manager
{
if(!_manager) {
_manager = [AFHTTPSessionManager manager];
}
return_manager;
}
- (void)loadData
{
// 显示指示器
[SVProgressHUDshowWithMaskType:SVProgressHUDMaskTypeBlack];
// 发送请求
NSMutableDictionary*params = [NSMutableDictionarydictionary];
[self.manager GET:@"http://www.baidu.com" parameters:nil:^(NSURLSessionDataTask*task,idresponseObject) {
// 隐藏指示器
[SVProgressHUD dismiss];
// 服务器返回的JSON数据
// 刷新表格
}failure:^(NSURLSessionDataTask*task,NSError*error) {
// 显示失败信息
[SVProgressHUD showErrorWithStatus:@"加载信息失败!"];
}];
}
#pragma mark - 控制器的销毁
- (void)dealloc
{
// 停止所有请求
[self.manager.operationQueuecancelAllOperations];
}
请求的时候全部用成员变量manager来进行请求,请求完成后对manager的操作队列进行全部取消操作即可
【AFNetWorking退出控制器取消网络请求】如果控制器内请求较多可以设置一个可变字典将所有请求加入字典,不需要时(注意不是dealloc方法)根据请求的URL或参数找到对应的请求取消即可
推荐阅读
- 投稿|退出所有社交平台后,罗永浩把互联网玩明白了
- 大数据|TiDB Operator 准入控制器
- Docker 笔记 - Docker 容器的退出状态码
- UIActivityIndicatorView(AFNetworking)扩展说明
- Cornerstone 意外退出、打开闪退的解决办法
- 投稿|ZARA三个姐妹品牌全线退出,快时尚关山难越
- 投资|退出效率高20倍,VC怎么会拒绝Web3呢?
- hive如何退出_罗永浩抖音直播超百万观众看直播秒开不卡顿,抖音是如何做到的(...)
- 投稿|【链得得独家】Meta悄然退出数字货币行业,数字钱包Novi即将关闭
- can|can通讯