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/