相信你已經(jīng)發(fā)現(xiàn)了称近,AFNetworking 在POST請(qǐng)求下辱匿,特別是設(shè)置了HTTPBody屬性值的時(shí)候,timeoutInterval 設(shè)置是無(wú)效的堂鲜。
假如你的APP的tabbar 是需要訪問接口動(dòng)態(tài)帶出的伞芹,如果網(wǎng)速不好的時(shí)候忘苛,你的產(chǎn)品就會(huì)遇到啟動(dòng)時(shí)間太久的情況蝉娜,即使本地有緩存機(jī)制唱较,也會(huì)因?yàn)闊o(wú)法控制接口請(qǐng)求時(shí)間而讓用戶等待太久扎唾。
如果你也遇到同樣的問題,請(qǐng)翻看如下攻略南缓。
錦囊如下:
GCD + 延時(shí)處理 + 取消網(wǎng)絡(luò)請(qǐng)求胸遇。
CGFloat timeoutInterval = 5.f;//超時(shí)時(shí)長(zhǎng)設(shè)置
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if ( [manager.tasks count]>0) {
[dataTask cancel];//取消網(wǎng)絡(luò)請(qǐng)求任務(wù)
}
});
完整代碼如下:
__block NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
if (error.code == NSURLErrorCancelled) {
// 取消了請(qǐng)求
} else {
// 其他錯(cuò)誤
}
}else{
if (success) {
//成功回調(diào)
}
}
}];
CGFloat timeoutInterval = 5.f;//超時(shí)時(shí)長(zhǎng)設(shè)置
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if ( [manager.tasks count]>0) {
[dataTask cancel];//取消網(wǎng)絡(luò)請(qǐng)求任務(wù)
}
});
[dataTask resume];
}