Macアプリケーション( NSRunLoop )に適用される実行ループをよりよく理解しようとしていますが、これはより一般的な質問になる可能性もあります。NSRunLoopのドキュメントには次のように書かれています。
...コードは、実行ループを駆動する
while
orループを提供します。for
ループ内で、run loopオブジェクトを使用して、イベントを受信し、インストールされたハンドラーを呼び出すイベント処理コードを「実行」します。
ドキュメントには、次のようなコード例があります。
BOOL shouldKeepRunning = YES;
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
したがって、コードは、終了する必要があると判断されるまで、実行ループを呼び出し続けます。メソッド「-runMode:beforeDate:
ループを1回実行し、指定された日付まで指定されたモードでの入力をブロックします。」また、-run
「レシーバーを永続的なループに入れ、その間に接続されているすべての入力ソースからのデータを処理する」方法もあります。
実行ループを繰り返し呼び出す(または-run
、これ自体がそう思われる)呼び出しがCPUを消費しないようにするにはどうすればよいですか?Cocoaアプリケーションは、メインの実行ループが実行されている間、バックグラウンドでアイドル状態になり、CPU時間をゼロ(またはほぼゼロ)消費します。
そして、内-runMode:beforeDate:
で、CPUをポーリングして消費することなく、入力が受信されるかタイマーが起動するまで、実行ループをどのようにブロックできますか?