PerformSelector的延迟时间为0?

时间:2013-02-05 21:54:24

标签: ios objective-c dynamic-dispatch

  

可能重复:
  How does -performSelector:withObject:afterDelay: work?

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

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

但是它做了什么?

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

1 个答案:

答案 0 :(得分:5)

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

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