ios - AFNetworking 成功/失败 block 是否在主线程上调用?

标签 ios afnetworking

AFNetworking 是否在主线程上调用完成 block ?还是在后台调用,需要我手动将 UI 更新分派(dispatch)到主线程?

使用代码而不是文字,这是来自 AFNetworking documentation 的示例代码调用 NSLog 替换为 UI 更新:

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    self.label.text = JSON[@"text"];
} failure:nil];

应该这样写吗?

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.label.text = JSON[@"text"];
    });
} failure:nil];

最佳答案

它们在主队列上调用,除非您在 AFHTTPRequestOperation 上显式设置队列,如 AFHTTPRequestOperation.m 中的 setCompletionBlockWithSuccess:failure 所示>

self.completionBlock = ^{
    if (self.error) {
        if (failure) {
            dispatch_async(self.failureCallbackQueue ?: dispatch_get_main_queue(), ^{
                failure(self, self.error);
            });
        }
    } else {
        if (success) {
            dispatch_async(self.successCallbackQueue ?: dispatch_get_main_queue(), ^{
                success(self, self.responseData);
            });
        }
    }
};

关于ios - AFNetworking 成功/失败 block 是否在主线程上调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225193/

相关文章:

ios - 使用 map 缩放缩放 MKAnnotationView

ios - 谷歌地图 iOS SDK

ios - 如何在 iOS 中最好地使用 MVC

ios - 调用委托(delegate)方法时无法识别选择器

ios - AFNetworking 缓存图像是自动加载还是我们必须手动加载?

iphone - 使用 Parse 同步数据,而不是下载数据

ios - 如何覆盖请求响应中的 HTTP header ?

ios - 如何快速将枚举存储到可变数组中

iphone - 尝试从磁盘访问缓存请求时 NSURLCache 返回 nil

ios - PList 类型?应用程序/x-plist 类型