Использование NSTimer для запуска NSThread в ios - PullRequest
1 голос
/ 25 января 2012

Мне нужно, чтобы фоновая операция планировалась каждые 10 минут или около того. Операция состоит из сбора объектов из основных данных и загрузки их информации в веб-сервис, чтобы не изменять их каким-либо образом.

Подход, о котором я думаю, заключается в создании nstimer в делегате приложения, который запускается каждые 10 минут. Это запустит NSThread, который будет запускать операцию в фоновом режиме, не вызывая беспокойства для пользователя. Нить здесь после выхода нормально.

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

Другое предложение в Интернете - использовать runloops, однако я не вижу использования в этом конкретном случае.

Есть ли у кого-нибудь предложения или они хотят рассказать, как они справляются с подобной ситуацией?

Привет

1 Ответ

2 голосов
/ 25 января 2012

Таймер звучит как правильный подход для фактического запуска вашей темы. Для настройки просто поместите это в ваш делегат приложения

[NSSTimer scheduledTimerWithTimeInterval:60.0 * 10.0 target:self selector:@selector(startBackgroundMethod) userInfo:nil repeats:YES];

Затем создайте свой код метода фона следующим образом:

- (void)startBackgroundMethod
{
    //the timer calls this method runs on the main thread, so don't do any
    //significant work here. the call below kicks off the actual background thread
    [self performSelectorInBackground:@selector(backgroundMethod) withObject:nil];
}

- (void)backgroundMethod
{
    @autoreleasepool
    {
        //this runs in a  background thread, be careful not to do any UI updates
        //or interact with any methods that run on the main thread
        //without wrapping them with performSelectorOnMainThread:
    }
}

Что касается того, действительно ли необходимо выполнять эту работу в фоновом потоке, это зависит от того, что это такое. Следует избегать потоков, за исключением случаев, когда это строго необходимо из-за вероятности ошибок параллелизма, поэтому, если вы сообщите нам, что собирается делать ваш поток, мы можем посоветовать, может ли подход, основанный на runloop, более подходящим.

...