Iphone 下载时停止NSThread
我有一个iPhone应用程序,我在其中显示一个从RSS提要加载的tableview。加载视图时,我调用此方法以在新的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
- (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方法放在这里
然后,您可以轻松地控制操作,可以设置可以并发运行的操作数,设置某些操作对其他操作的依赖关系。您还可以轻松地取消操作,这正是您希望在此处执行的操作
查看和的文档