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())
。