executeSelector:withObject:afterDelay: в пределах NSOperation

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

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

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

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

1 ответ

Решение

Одной из возможностей будет использование 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(),

Другие вопросы по тегам