NSRunLoop のrunMode:beforeDate
メソッドの正しい使い方に疑問があります。
受信したデリゲート メッセージを処理するセカンダリ バックグラウンド スレッドがあります。
基本的に、バックグラウンド スレッドで実行する必要があるプロセス集中型のロジックがあります。
だから、私は2つのオブジェクトを持っていObjectA
ますAnotherObjectB
.
ObjectA
初期化して、それを開始するようにAnotherObjectB
指示します。は非同期で動作するため、のデリゲートとして機能します。ここで、デリゲート メッセージで実行する必要があるコードは、バックグラウンド スレッドで実行する必要があります。そのため、NSRunLoop を作成し、実行ループを設定するために次のようなことを行いました。AnotherObjectB
AnotherObjectB
ObjectA
AnotherObjectB
ObjectA
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (aCondition);
aCondition
「完了委任メッセージ」のどこかに設定されています。
私はすべてのデリゲート メッセージを取得しており、それらはそのバックグラウンド スレッドで処理されています。
私の質問は次のとおりです。これは正しいアプローチですか?
私がこれを尋ねる理由[NSDate distantFuture]
は、数世紀にわたる日付だからです。基本的に、runLoop は「distantFuture」までタイムアウトしません。それまでは、Mac やこのバージョンの iOS を使用することは絶対にありません。>_<
ただし、実行ループをそれほど長く実行したくありません。適切に終了できるように、最後のデリゲート メッセージが呼び出されたらすぐに実行ループを完了させたいと考えています。
また、間隔を短くして繰り返しタイマーを設定できることも知っていますが、これはポーリングに似ているため、最も効率的な方法ではありません。代わりに、デリゲート メッセージが到着したときにのみスレッドを動作させ、メッセージがないときにスレッドをスリープ状態にしたいと考えています。それで、私が取っているアプローチは正しいアプローチですか、それとも他の方法がありますか。ドキュメントとガイドを読み、それらを読んで理解したことに基づいてこれを設定しました。
ただし、完全に確信が持てない場合は、この素晴らしいコミュニティに意見と確認を求めることをお勧めします.
それでは、よろしくお願いいたします。
乾杯!