executeSelector: withObject: afterDelay: в пределах NSOperation - PullRequest
4 голосов
/ 30 декабря 2011

Я выполняю некоторый код в некоторых NSOperation объектах, управляемых NSOperationQueue.Код также содержит отложенный вызов метода с использованием performSelector:withObject:afterDelay:.

Проблема состоит в том, что соответствующий селектор, который должен называться отложенным, вообще не вызывается .

Прочитав этот ответ на вопрос StackOverflow , я полагаю, это связано с тем, что NSOperation уже завершен и его поток даже больше не существует, "забыв"запланированный вызов селектора.

Как я могу обойти это? Как я могу сделать отложенный вызов метода в NSOperation?

1 Ответ

4 голосов
/ 30 декабря 2011

Одной из возможностей было бы использование Grand Central Dispatch, а именно dispatch_after():

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after(popTime, queue, ^{
    ...
});

Вместо dispatch_get_global_queue() вы, конечно, можете также создать свою собственную очередь отправки или использовать основную очередь с dispatch_get_main_queue().

...