4

我正在一些NSOperationNSOperationQueue. 该代码还包含一个延迟的方法调用,使用performSelector:withObject:afterDelay:.

问题是,应该被称为延迟的相应选择器根本没有被调用

阅读了 StackOverflow question 的这个答案后,我想这是由于NSOperation已经完成并且它的线程甚至不再存在,“忘记”了对选择器的预定调用。

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

4

1 回答 1

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

于 2011-12-30T15:02:42.710 回答