在我的应用程序中,有时会使用performSelector安排一堆消息。

在某些情况下,在处理UI动作时,我需要等待所有当前调度的选择器触发。

我可以将我的代码放置在另一种方法中,并使用performSelector:target:argument:order:modes:来调度它,并且order值要足够高以确保它能最后触发,但是我认为这会导致一个丑陋的解决方案是有原因的。

因此,我发送[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]],它似乎可以正常工作。

不过,我不确定这是否是让运行循环滚动一次迭代的合法方法。另外,这种方法是否有潜在的麻烦?

最佳答案

好吧,回答我自己的问题。

首先是duplicate(也称为this)。

接下来,通常,从同一运行循环中发送[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]]是一个坏主意:


从理论上讲,自动释放池将以这种方式耗尽。实际上,我无法通过使用在runUntilDate之前分配的对象(在ARC下)使我的应用程序崩溃,但是最好还是不要冒险。
如果在runUntilDate期间以某种方式使另一个动作出队,则可能会导致一些意外的副作用。


TL; DR我应该帮自己一个忙,用更具确定性的代码代替那段代码。

10-08 07:25