在苹果的CocoaXMLParser示例的CocoaXMLParser类中,出现了以下代码:
rssConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
[self performSelectorOnMainThread:@selector(downloadStarted) withObject:nil waitUntilDone:NO];
if (rssConnection != nil) {
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!done);
}根据NSRunLoop文档,“一般来说,您的应用程序不需要创建或显式管理NSRunLoop对象。每个NSThread对象,包括应用程序的主线程,都有一个根据需要自动创建的NSRunLoop对象。”在这种情况下,为什么在本例中要显式管理run-loop?它不是由NSURLConnection请求生成的线程自动创建和销毁的吗?
发布于 2009-11-22 01:39:43
在该代码中,run循环基本上只是被告知永远运行,以便该线程可以继续处理从NSURLConnection传入的后台数据。即使为您创建了run-loop,默认情况下,线程也会在该方法结束时终止。
通常,在这样做时,将所有内容都放在NSOperation中会更容易,然后再放到NSOperationQueue中(尽管如果您要实现NSUrlConnection回调,则必须在NSOperation类中提供一些额外的方法)。
https://stackoverflow.com/questions/1775479
复制相似问题