Apple的CocoaXMLParser示例中的运行循环和线程

时间:2009-11-21 13:27:31

标签: iphone objective-c cocoa-touch

在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请求生成的线程自动创建和销毁?

1 个答案:

答案 0 :(得分:2)

在该代码中,运行循环基本上只是被告知要永远运行,以便该线程可以继续处理来自NSURLConnection的传入背景数据。即使为您创建了一个运行循环,默认情况下该线程将在该方法结束时终止。

一般来说,在做类似的事情时,更容易将所有内容放在NSOperation中,然后进入NSOperationQueue(尽管如果要实现NSUrlConnection回调,则必须在NSOperation类中提供一些额外的方法)。