iPhone - 停止正在运行的方法?

时间:2010-07-20 02:48:30

标签: iphone objective-c

我有一个[self parseXMLFileAtURL:path]方法。无论如何中途停止它?就像终止方法一样。

这样做的原因是因为我在一台PC上运行apache http服务器,如果服务器没有运行,如果调用此方法,应用程序将“挂起”。所以我想要在一定时间后终止方法,5s也许。并显示警告信息。

3 个答案:

答案 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)

我非常确定您可以尝试使用sigaction安装信号处理程序来处理SIGALRM并使用alarm函数。但是,使用Cocoa框架可能有更好的解决方案。我会把它留在这里,但这可能不是最简单的方法。

答案 2 :(得分:0)

方法只是一个C(++)函数,所以实际上没有办法阻止它。