【问题标题】:if I call an async operation in one view controller and the user moves to the next view controller, does the async call finish如果我在一个视图控制器中调用异步操作并且用户移动到下一个视图控制器,异步调用是否完成
【发布时间】:2014-12-16 20:52:43
【问题描述】:

在我的第一个屏幕上,我想加载和缓存几个 JSON 调用和图像调用。如果用户在完成之前点击了第二个视图控制器, 这些电话会被取消还是会结束?

AFNetworking 中的示例调用:

  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  manager.responseSerializer = [AFJSONResponseSerializer serializer];
  manager.requestSerializer = [AFJSONRequestSerializer serializer];
  NSString *arcURL = [NSString stringWithFormat:@"%@/arc/v1/api/locations/%i/mobile_home",MYHost(), locationID];
  [manager GET:arcURL parameters:nil success:^(NSURLSessionDataTask *operation, id responseObject) {

  // on return will get written to a cache

SDWebImage 中的示例调用

    NSURL *imageURL=[[NSURL alloc] initWithString:[mi objectForKey:@"instore_image_url"]];
  SDWebImageManager *manager = [SDWebImageManager sharedManager];
  [manager downloadWithURL:imageURL
                   options:0
                  progress:^(NSInteger receivedSize, NSInteger expectedSize)
   {
     // progression tracking code
   }
                 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
   {
     if (image)
     {
        // image downloaded - just writing to cache
     }
   }];
}

【问题讨论】:

  • 一般情况下你负责停止它,其余的取决于实现。
  • 您可以通过设置断点或 NSLog 调用来检查
  • 所以切换 ViewController 会导致它们继续运行?我基本上是在预加载和写入缓存,所以需要它们,但那时不需要。
  • 我认为调用会被执行,因为它们是异步的并且在后台线程上运行。

标签: ios afnetworking afnetworking-2 nsoperationqueue sdwebimage


【解决方案1】:

GETPOST 等,AFHTTPSessionManager 的方法返回 NSURLSessionTask 引用。如果您离开发起请求的控制器,请求将继续,除非您 (a) 保存对该 NSURLSessionTask 对象的引用; (b) 显式调用该对象的cancel 方法。

SDWebImage 方法downloadWithURL 同样返回一个引用(在这种情况下,一个符合SDWebImageOperation 协议的对象),如果你愿意,你可以cancel

【讨论】:

  • 正确。 SDWebImageManager 也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多