应用终止时NSThread退出

时间:2009-07-13 09:34:28

标签: iphone objective-c multithreading

我有一个iphone应用程序,它运行一些线程来计算搜索。搜索从库中调用耗时的函数。

我需要在应用程序终止时退出线程,否则线程会继续运行,并且当我重新打开应用程序时搜索会产生问题。

我试图在帖子中订阅

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mainApplicationWillTerminate) name:@"UIApplicationWillTerminateNotification" object:nil];

在mainApplicationWillTerminate

-(void)mainApplicationWillTerminate;
{
    [NSThread exit];
}

问题仍然存在,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如文档中所述,您应该避免使用[NSThread退出]。一般来说,为了避免内存泄漏和其他灾难,线程永远不应该“从外部”停止。线程总是自行退出

在你的线程主循环中,你应该检查线程是否被取消:

if ([[NSthread currentThread] isCancelled]) {
    return;
}

要取消它,请从另一个线程调用其“取消”方法。

在您的情况下,您应该设置一个应用程序委托(参见UIApplicationDelegate

- (void)applicationWillTerminate:(UIApplication *)application
{
    [myThread cancel];
}

最好还看一下漂亮的NSOperation课程。