1

私のアプリケーションでは、ある時点で、を使用してスケジュールされた一連のメッセージがありますperformSelector

状況によっては、UIアクションを処理しているときに、現在スケジュールされているすべてのセレクターが起動するのを待つ必要があります。

コードを別のメソッドに配置し、最後に実行されることを確認するのに十分高い値を使用performSelector:target:argument:order:modes:してスケジュールすることorderもできますが、それが醜い解決策になると思う理由があります。

だから私は送ります[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]]、そしてそれは私がそれを必要とするのと同じように働くようです。

それでも、それが1回の反復で実行ループをロールさせる正当な方法であるかどうかはわかりません。また、このアプローチに関連する潜在的な問題はありますか?

4

1 に答える 1

2

さて、私自身の質問に答えます。

まず第一に、それは複製です(また、これ)。

次に、一般的に[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]]、同じ実行ループ内から送信することは悪い考えです。

  1. 理論的には、自動解放プールはそのように排出されます。実際には、(ARCの下で)事前に割り当てられたオブジェクトを使用してアプリをクラッシュさせることはできませんでしたが、runUntilDateとにかくリスクを冒さない方がよいでしょう。

  2. その間に何らかの方法で別のアクションがデキューされるrunUntilDateと、予期しない副作用が発生する可能性があります。

TL; DR私は自分に有利に働き、そのコードをより決定論的なものに置き換える必要があります。

于 2012-04-29T17:45:20.803 に答える