2

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

我经常使用这段代码让 UI 在调用长时间运行的方法之前完成其业务:

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

它有什么作用?

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

4

1 回答 1

5

延迟调用它0确实会在下一次通过 runloop 时调用此方法。

IIRC,它所做的是设置一个表示目标和动作的结构,并将 a 附加CFRunLoopSource到运行循环,当触发时,它将调用目标上的动作。然后它向 runloop 发出信号,告诉它它有一个准备好的源。这意味着下一次runloop处理它的源(即下一次通过runloop)时,它将执行你的延迟选择器。

于 2013-02-05T22:06:14.763 回答