iOS 有效设置网络请求超时时间(干货)

相信你已经发现了,AFNetworking 在POST请求下,特别是设置了HTTPBody属性值的时候,timeoutInterval 设置是无效的。
假如你的APP的tabbar 是需要访问接口动态带出的,如果网速不好的时候,你的产品就会遇到启动时间太久的情况,即使本地有缓存机制,也会因为无法控制接口请求时间而让用户等待太久。
如果你也遇到同样的问题,请翻看如下攻略。

锦囊如下:

GCD + 延时处理 + 取消网络请求。

CGFloat timeoutInterval = 5.f;//超时时长设置

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
              if ( [manager.tasks count]>0) {
                  [dataTask cancel];//取消网络请求任务
              }
    });

完整代码如下:

__block NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {

    if (error) {          
         if (error.code == NSURLErrorCancelled) {
           // 取消了请求
          } else {
           // 其他错误
    } 
   }else{
       if (success) {
           //成功回调
     }
 }

}];

CGFloat timeoutInterval = 5.f;//超时时长设置

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
              if ( [manager.tasks count]>0) {
                  [dataTask cancel];//取消网络请求任务
              }
    });


  [dataTask resume];

}
       

你可能感兴趣的:(iOS 有效设置网络请求超时时间(干货))