Iphone 下载时停止NSThread

Iphone 下载时停止NSThread,iphone,xml,cocoa,nsthread,Iphone,Xml,Cocoa,Nsthread,我有一个iPhone应用程序,我在其中显示一个从RSS提要加载的tableview。加载视图时,我调用此方法以在新的NSThread中运行: - (void)start:(NSURL*)url { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSXMLParser *XMLParser = [[[NSXMLParser alloc] initWithContentsOfURL:url] autorelea

我有一个iPhone应用程序,我在其中显示一个从RSS提要加载的tableview。加载视图时,我调用此方法以在新的NSThread中运行:

- (void)start:(NSURL*)url {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSXMLParser *XMLParser = [[[NSXMLParser alloc] initWithContentsOfURL:url] autorelease];
    [XMLParser setDelegate:self];

    if (items) {
        [items release];
    }
    items = [[NSMutableArray alloc] init];

    [self startParsing:XMLParser];

    [pool drain];
}

它工作正常,但是如果用户在下载或解析xml时离开视图,我希望线程停止运行,但是如何在不泄漏内存的情况下停止它的运行呢?另外,如果它在运行-initWithContentsOfURL:method时我希望它停止,我将如何停止该方法?

这些是您的线程停止选项

从指南的其他地方


“如果您预期在操作的中间需要终止一个线程,您应该从一开始就设计您的线程以响应取消或退出消息。”

< P>这是您的线程停止选项

从指南的其他地方


“如果您预期在操作的中间需要终止一个线程,您应该从一开始就设计您的线程以响应取消或退出消息。”

< P>如果您预期需要控制连接(即,如果用户取消或导航,停止连接)。在解析XML之前,您可能应该使用异步
NSURLConnection
API加载数据。除了让您能够根据需要关闭连接之外,您还能够更好地响应网络错误


正如NSD指出的,您可能应该在驱动XML解析线程的类上实现某种类型的
cancel
方法,然后只需使用
performSelector:onThread:withObject:waitUntilDone:
(或类似)当用户取消下载或导航离开时,从主线程开始。

如果您预期需要控制连接(即,如果用户取消或导航离开,则停止连接),您可能应该在解析XML之前使用异步
NSURLConnection
API加载数据。除了让您能够根据需要关闭连接之外,您还能够更好地响应网络错误


正如NSD指出的,您可能应该在驱动XML解析线程的类上实现某种类型的
cancel
方法,然后只需使用
performSelector:onThread:withObject:waitUntilDone:
(或类似)当用户取消下载或导航离开时,从您的主线程开始。

也许您应该查看
NSOperation
NSOperationQueue

这些类为您提供了对并发和异步执行的大量控制

基本思想是创建一个队列,然后将NSOperation子类化。在子类的main方法中,完成您的工作,在这种情况下,您可以将start方法放在这里

然后,您可以轻松地控制操作,可以设置可以并发运行的操作数,设置某些操作对其他操作的依赖关系。您还可以轻松地取消操作,这正是您希望在此处执行的操作


查看和的文档。

也许您应该查看
NSOperation
NSOperationQueue

这些类为您提供了对并发和异步执行的大量控制

基本思想是创建一个队列,然后将NSOperation子类化。在子类的main方法中,完成您的工作,在这种情况下,您可以将start方法放在这里

然后,您可以轻松地控制操作,可以设置可以并发运行的操作数,设置某些操作对其他操作的依赖关系。您还可以轻松地取消操作,这正是您希望在此处执行的操作

查看和的文档