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

Ken*_*eth 3 iphone objective-c

我有一个[self parseXMLFileAtURL:path]方法.无论如何中途停止它?喜欢终止方法.

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

Ste*_*eve 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];
Run Code Online (Sandbox Code Playgroud)

(注意:你必须检查错误响应,我为了清楚起见省略了它)

另外,理想情况下(因为在我的例子中我使用同步方法)这应该在后台线程上运行...但我发现使用"performSelectorInBackground:"手动在后台线程上运行它并使用同步方法更容易比我使用异步方法.请记住,如果你这样做,你将不得不创建自己的自动发布池...但这是两行,而且非常简单.

除此之外,有可能终止方法...你必须在不同的线程上运行它,如果花了太长时间就杀死线程......但实际上,NSMutableURLRequest并不是那么糟糕,并且它已经为您提供了您正在寻找的超时选项.

线程编程指南:http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html#//apple_ref/doc/uid/10000057i-CH15-SW2谈论杀戮线程...并告诉你(间接)如何做...但如果你只是杀死线程,你几乎可以保证泄漏一些东西.