我正在NSOperation
管理的某些NSOperationQueue
对象中执行一些代码。该代码还包含使用performSelector:withObject:afterDelay:
的延迟方法调用。
问题是,应该被调用的相应选择器延迟,根本不会被调用。
阅读this answer to a StackOverflow question后,我想这是因为NSOperation
已经完成且其线程不再存在,“忘记”对选择器的预定调用。
我该如何解决这个问题?
如何对NSOperation
内的方法进行延迟调用?
答案 0 :(得分:4)
一种可能性是使用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()
。