在主线程上执行NSURLConnection sendAsynchronousRequest完成块吗?

时间:2014-08-04 03:47:43

标签: ios objective-c uikit nsurlconnection objective-c-blocks

我想知道当我使用completionHandler时是否在主线程上调用NSURLConnection sendAsynchronousRequest块。我主要担心的是我是否需要自己在主线程上发送UIKit个调用。

NSURLConnection的文件没有提到这个细节,除非我错过了。

我描述了我的代码,并且没有内存泄漏,这表明该块是在主线程上执行的。

有没有给出明确答案的文件?

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    [self.progress stopAnimating];
    if (data != nil) {
        ...
    } else {
        [self showMessageIgnoreAcknowledgement:@"Error" message:@"blah"];
    }
}];

1 个答案:

答案 0 :(得分:5)

来自NSURLConnection sendAsynchronousRequest:queue:completionHandler:方法的文档:

  

加载URL请求的数据,并在请求完成或失败时在操作队列上执行处理程序块。

同样来自关于queue参数的评论:

  

请求完成或失败时将处理程序块分派到的操作队列。

由于您传入主队列,因此完成处理程序将位于主线程上(主队列位于主线程上)。