NSThread выход при завершении приложения - PullRequest
1 голос
/ 13 июля 2009

У меня есть приложение для iphone, оно запускает какой-то поток для вычисления поиска. Поиск производится с помощью функции, занимающей много времени из библиотеки.

Мне нужно выйти из потока, когда приложение завершается, в противном случае поток продолжит работу и возникнет проблема поиска, когда я снова открою приложение.

Я пытался подписаться в теме

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

А в mainApplicationWillTerminate

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

Проблема все еще присутствует, есть идеи?

1 Ответ

1 голос
/ 13 июля 2009

Как указано в документации, вам следует избегать использования [NSThread exit].Вообще, чтобы избежать утечек памяти и других бедствий, поток никогда не должен останавливаться «извне».Поток должен всегда выходить сам по себе .

В главном цикле вашего потока вы должны проверить, был ли поток отменен:

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

Чтобы отменить его, вы вызываете его "отменить "метод из другого потока.

В вашем случае вам следует настроить делегата приложения (см. UIApplicationDelegate )

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

Лучше взгляните на класс NSOperation .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...