【发布时间】:2011-11-02 19:41:17
【问题描述】:
最近我一直在研究和使用NSURLConnection 和并发。
似乎有几种不同的方法,而我尝试过的方法(调度队列和操作队列)最终似乎都能正常工作。
我在并发和NSURLConnection 中遇到的一个问题是没有调用委托方法。经过一番研究,我发现NSURLConnection 需要安排在主运行循环中,或者NSOperation 应该在主线程上运行。在第一种情况下,我像这样调用NSURLConnection:
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[connection start];
在后一种情况下是这样的:
- (void)start
{
if (![NSThread isMainThread])
{
[self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
return;
}
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
委托方法处理其他所有事情,并且似乎都可以正常工作。
在我使用调度队列的情况下,我做了与第一种情况相同的事情(在主运行循环中安排NSURLConnection)。
我的问题是,这两种方法有什么区别?还是它们实际上是相同的,只是实现方式不同?
第二个问题是,为什么这是必要的?我还在NSOperation 中使用了NSXMLParser,这似乎不需要主运行循环或主线程,它就可以工作。
【问题讨论】:
标签: objective-c concurrency nsurlconnection