NSRunLoopとCFRunLoopにはメソッドがあり、特定の時間に実行するにはCFRunLoopInModeとNSRunLoop --runUntillDateT
これらのメソッドは、まで実行する時間を指定します。
しかし、runLoop内のすべてのメッセージを処理し、それが完了してアイドル状態になったら終了したかったのです。一部のrunLoopソースは、処理に無期限の時間がかかる可能性があるためです。ですから、時間については言えません。
NSRunLoopとCFRunLoopにはメソッドがあり、特定の時間に実行するにはCFRunLoopInModeとNSRunLoop --runUntillDateT
これらのメソッドは、まで実行する時間を指定します。
しかし、runLoop内のすべてのメッセージを処理し、それが完了してアイドル状態になったら終了したかったのです。一部のrunLoopソースは、処理に無期限の時間がかかる可能性があるためです。ですから、時間については言えません。
を使用CFRunLoopRunInModeして 1 つのパスのイベント ループを実行すると、ソースを処理したかどうかがわかります。したがって、次のようなことを試すことができます。
while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, 1) == kCFRunLoopRunHandledSource) {
// nothing
}
試すことができる別のアプローチはCFRunLoopObserver、 のactivities引数でを作成することですkCFRunLoopBeforeWaiting。このオブザーバーは、ソースまたはタイマーが起動するのを待って実行ループがスリープ状態になる直前に呼び出されます。オブザーバーの吹き出しでは、単に を呼び出すことができますCFRunLoopStop(CFRunLoopGetCurrent())。