天天看點

AFNetworking取消正在進行的網絡請求

當在實時搜尋的需求中,隻需要保留最新一次的資料時

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的資訊,表示請求已經成功取消了。

繼續閱讀