performSelector:withObject:afterDelay:在NSOperation中

时间:2011-12-30 14:01:28

标签: ios concurrency nsoperation performselector

我正在NSOperation管理的某些NSOperationQueue对象中执行一些代码。该代码还包含使用performSelector:withObject:afterDelay:的延迟方法调用。

问题是,应该被调用的相应选择器延迟,根本不会被调用

阅读this answer to a StackOverflow question后,我想这是因为NSOperation已经完成且其线程不再存在,“忘记”对选择器的预定调用。

我该如何解决这个问题? 如何对NSOperation内的方法进行延迟调用?

1 个答案:

答案 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()