1

「Run Loops」テーマに関する「IOS Developer Library」を読みましたが、記事の中で「Run Loops を再帰的に実行することは可能です」という一文がありました。私の質問は、どのシナリオで再帰実行ループを使用する必要があるかです。

私の別の質問は、「実行ループの目的は、実行する作業があるときにスレッドをビジー状態に保ち、何もないときにスレッドをスリープ状態にすることです。」というステートメントについてです。イベントが来ない場合、実行ループはどのようにスリープしますか?メインスレッドの実行ループはスリープしますか? 2番目のスレッドの状況はどうですか?

私がインターネットから見つけたネストされた実行ループの一例は、以下のようなものです:

 [NSThread detachNewThreadSelector:@selector(runOnNewThread) toTarget:self withObject:nil]; 
 while (!end) {
    NSLog(@”runloop…”);
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    NSLog(@”runloop end.”);
 }

現在のスレッドは、別のスレッドの作業が完了するまでブロックされます。しかし、なぜこれが起こるのか、現在のスレッドをどのようにブロックできるのでしょうか?
誰でも私の質問に答えることができますか?

4

1 に答える 1

0

おそらく類推は、実行ループが無限 while ループであると仮定して (基本的にはそうです)、その中に別の無限 while ループを作成した場合、内側の while ループが無限であるため、外側の while ループが再びループすることはありません。彼らが行ったのは、別のループで無限ループを作成すると、代わりに外側のループから出て、その横に沿って(別のスレッドで)実行されるようになっていることです。

あなたの更新に応じて:

whileループに終了条件がないこと以外の理由でブロックされることは間違いありません

while (!end) {

endが別のスレッドから制御されている場合、現在のスレッドがこの while ループから移動するには、そのスレッドを true に設定するend必要があります。

このコードは本当に悪いようです。現在の実行ループを再起動し続け、おそらく目的を達成できません

于 2015-09-04T04:40:08.903 に答える