當在實時搜尋的需求中,隻需要保留最新一次的資料時
1.
以AFNetworking為例,上我自己的網絡請求封裝主要代碼:
//單例模式
+ (HttpManager *)sharedManager
{
static dispatch_once_t once;
dispatch_once(&once, ^{
httpManager = [[HttpManager alloc] init];
});
return httpManager;
}
//網絡類初始化
- (id)init{
self = [super init];
if(self)
{
manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
}
return self;
}
2.
取消正在進行的網絡請求: 在需要取消網絡請求的地方調用此方法
不要每次請求的時候都去初始化manager(AFHTTPSessionManager)對象,tasks裡面裝的就是正在進行的網絡請求
- (void)cancelRequest
{
if ([[HttpManager shareInstance].manager.tasks count] > 0) {
NSLog(@"傳回時取消網絡請求");
[[HttpManager shareInstance].manager.tasks makeObjectsPerformSelector:@selector(cancel)];
//NSLog(@"tasks = %@",manager.tasks);
}
}
manager裡面的tasks裝的就是正在執行的網絡請求。執行cancel後,tasks就會清空,網絡請求會進入失敗的狀态,然後響應failure block,得到一個error的資訊,表示請求已經成功取消了。