AFNetWorking退出控制器取消網(wǎng)絡(luò)請(qǐng)求

通過AFN來做網(wǎng)絡(luò)請(qǐng)求,有可能在網(wǎng)絡(luò)比較慢的時(shí)候,請(qǐng)求結(jié)果還沒回來,但是此時(shí)用戶已經(jīng)退出了這個(gè)控制器,也就是說這個(gè)控制器已經(jīng)被銷毀了,但是請(qǐng)求還在繼續(xù),當(dāng)網(wǎng)絡(luò)請(qǐng)求結(jié)果回來以后,在請(qǐng)求成功和失敗的Block里面都會(huì)調(diào)用self(也就是銷毀的那個(gè)控制器)的一些方法,但是控制器已經(jīng)被銷毀了,這個(gè)時(shí)候就會(huì)Crash,所以為了防止這種情況,就要在控制器銷毀的時(shí)候把正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求全部取消掉,這樣就不會(huì)繼續(xù)進(jìn)行請(qǐng)求了。

/**?AFN請(qǐng)求管理者?*/

@property(nonatomic,strong)AFHTTPSessionManager *manager;


-?(AFHTTPSessionManager*)manager

{

if(!_manager)?{

_manager?=?[AFHTTPSessionManager manager];

}

return_manager;

}


-?(void)loadData

{

//?顯示指示器

[SVProgressHUD ? showWithMaskType:SVProgressHUDMaskTypeBlack];

//?發(fā)送請(qǐng)求

NSMutableDictionary*params?=?[NSMutableDictionarydictionary];

[self.manager GET:@"http://www.baidu.com" parameters:nil:^(NSURLSessionDataTask*task,idresponseObject)?{

//?隱藏指示器

[SVProgressHUD dismiss];

//?服務(wù)器返回的JSON數(shù)據(jù)

//?刷新表格

}failure:^(NSURLSessionDataTask*task,NSError*error)?{

//?顯示失敗信息

[SVProgressHUD showErrorWithStatus:@"加載信息失敗!"];

}];

}


#pragma?mark?-?控制器的銷毀

-?(void)dealloc

{

//?停止所有請(qǐng)求

[self.manager.operationQueue ?cancelAllOperations];

}

請(qǐng)求的時(shí)候全部用成員變量manager來進(jìn)行請(qǐng)求,請(qǐng)求完成后對(duì)manager的操作隊(duì)列進(jìn)行全部取消操作即可

如果控制器內(nèi)請(qǐng)求較多可以設(shè)置一個(gè)可變字典將所有請(qǐng)求加入字典,不需要時(shí)(注意不是dealloc方法)根據(jù)請(qǐng)求的URL或參數(shù)找到對(duì)應(yīng)的請(qǐng)求取消即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容