我有一个[self parseXMLFileAtURL:path]方法。无论如何中途停止它?就像终止方法一样。
这样做的原因是因为我在一台PC上运行apache http服务器,如果服务器没有运行,如果调用此方法,应用程序将“挂起”。所以我想要在一定时间后终止方法,5s也许。并显示警告信息。
答案 0 :(得分:5)
我有两个建议......如果可能,请使用NSMutableURLRequest和NSURLConnection来检索数据;这可以让你更好地控制超时等事情。
NSError * error;
NSURLResponse * response;
NSMutableURLRequest * request = [NSMutableURLRequest
requestWithURL:[NSURL URLWithString:@"http://..."]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60.0];
// Not sure if you need this, but I frequently do POSTs as well, so whatever:
[request setHTTPMethod:@"GET"];
NSData * responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString * xml = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];
(注意:您必须检查错误响应,我为了清楚起见省略了它)
另外,理想情况下(因为在我的示例中我使用同步方法)这应该在后台线程上运行...但我发现使用“performSelectorInBackground:”手动在后台线程上运行它更容易并使用同步方法,比我使用异步方法。请记住,如果你这样做,你将不得不创建自己的自动发布池...但这是两行,而且非常简单。
除此之外,可以终止方法...你必须在不同的线程上运行它,如果花了太长时间就杀死线程......但实际上,NSMutableURLRequest并非如此坏了,它已经为你提供了你正在寻找的超时选项。
线程编程指南:http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html#//apple_ref/doc/uid/10000057i-CH15-SW2谈论杀死线程......并告诉你(间接)如何做...但如果你只是杀死线程,你几乎可以保证泄漏东西
答案 1 :(得分:2)
答案 2 :(得分:0)
方法只是一个C(++)函数,所以实际上没有办法阻止它。