PerformSelector with Delay 0?



可能重复:
performSelector:withObject:afterDelay:如何工作?

我经常使用这段代码让UI在调用一个长期运行的方法之前完成它的业务:

[obj performSelector:@selector(go) withObject:nil afterDelay:0];

但是它做什么

我个人的解释一直是在下一个运行循环中调用go方法,但这肯定是不对的。

用延迟0调用它确实会在下一次运行循环中调用此方法。

IIRC,它所做的是建立一个表示目标和操作的结构,并将一个CFRunLoopSource附加到运行循环,当被触发时,该运行循环将调用目标上的操作。然后,它向运行循环发出信号,告诉它它有一个现成的源。这意味着下一次运行循环处理其源时(即下一次通过运行循环),它将执行延迟选择器。

最新更新