如何在dispatch_queue或NSThread或NSOperationQueue中使用NSURLConnection?

时间:2012-08-28 09:55:03

标签: objective-c grand-central-dispatch nsthread nsoperation nsoperationqueue

我尝试在NSThread和dispatch_queue中使用NSURLConnection。不会调用已实现的NSURLConnectionDelegate方法。但是当我在NSThread和NSOperationQueue中使用NSOperation时,会调用这些方法。

2 个答案:

答案 0 :(得分:3)

未调用NSURLConnectionDelegate方法,因为您的线程或调度块在调用委托方法之前完成执行。如果你想以这种方式在自己的线程中使用NSURLConnection,正如其他人建议你必须保持运行循环。

Here就是一个例子。基本上

while(!finished) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
    finished = TRUE;
}

以上所述,在异步块内部使用NSURLConnection同步API会不会更好?例如,您可以将同步请求包装在NSOperation

答案 1 :(得分:0)

您可以使用基于块的方法:

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    {
        if ([data length] > 0 && error == nil){
            // we should check that data is OK
            NSLog(@"Data received");
        }
    }