2013-02-05 43 views
2

可能重复:
How does -performSelector:withObject:afterDelay: work?带延迟0的PerformSelector?

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

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

什么它做什么?

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

+3

请参阅:http://stackoverflow.com/a/1922583/191794 –

+0

谢谢汤姆,这工作。我应该删除问题(删除)吗? –

+2

@Nate:他们呢? WTF。当知道提问者是否不可能标记任何答案时,这非常有用。 –

回答

5

调用延迟0确实会在下次通过runloop时调用此方法。它的功能是建立一个代表目标和动作的结构体,并将一个CFRunLoopSource附加到runloop上,当触发时,它将调用目标上的动作。然后它通知runloop,告诉它它有一个准备好的来源。这意味着下一次runloop处理其源(即下一次通过runloop)时,它将执行你的延迟选择器。