1

在我的应用程序中,有时我会使用performSelector.

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

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

所以我发送[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]],它似乎就像我需要的那样工作。

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

4

1 回答 1

2

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

首先,它是重复的(也是this)。

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

  1. 理论上,自动释放池会以这种方式耗尽。在实践中,我无法通过使用预先分配的对象runUntilDate(在 ARC 下)使我的应用程序崩溃,但最好还是不要冒险。

  2. 如果在此期间另一个动作出队,runUntilDate可能会导致一些意想不到的副作用。

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

于 2012-04-29T17:45:20.803 回答