可能重复:
How does -performSelector:withObject:afterDelay: work?
我经常使用此代码让UI在调用长时间运行的方法之前完成其业务:
[obj performSelector:@selector(go) withObject:nil afterDelay:0];
但是它做了什么?
我个人的解释一直是在下一个运行循环中调用go
方法,但肯定是不对的。
答案 0 :(得分:5)
使用延迟0
调用它确实会在下一次通过runloop时调用此方法。
CFRunLoopSource
附加到runloop,当触发时,它将调用目标上的动作。然后它向runloop发出信号,告诉它它有一个现成的源。这意味着下次runloop处理其源(即下一次通过runloop)时,它将执行延迟选择器。