在我的应用程序中,有时会使用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我应该帮自己一个忙,用更具确定性的代码代替那段代码。