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()
,