可能重复:
performSelector:withObject:afterDelay:如何工作?
我经常使用这段代码让UI在调用一个长期运行的方法之前完成它的业务:
[obj performSelector:@selector(go) withObject:nil afterDelay:0];
但是它做什么
我个人的解释一直是在下一个运行循环中调用go
方法,但这肯定是不对的。
用延迟0
调用它确实会在下一次运行循环中调用此方法。
IIRC,它所做的是建立一个表示目标和操作的结构,并将一个CFRunLoopSource
附加到运行循环,当被触发时,该运行循环将调用目标上的操作。然后,它向运行循环发出信号,告诉它它有一个现成的源。这意味着下一次运行循环处理其源时(即下一次通过运行循环),它将执行延迟选择器。