在Apple的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对象。”在此上下文中,为什么在此示例中显式管理运行循环?是否不会由NSURLConnection请求生成的线程自动创建和销毁?
答案 0 :(得分:2)
在该代码中,运行循环基本上只是被告知要永远运行,以便该线程可以继续处理来自NSURLConnection的传入背景数据。即使为您创建了一个运行循环,默认情况下该线程将在该方法结束时终止。
一般来说,在做类似的事情时,更容易将所有内容放在NSOperation中,然后进入NSOperationQueue(尽管如果要实现NSUrlConnection回调,则必须在NSOperation类中提供一些额外的方法)。