いくつかのコードを操作していると、s 内で初めて実行ループに出くわしますNSOperation
。
s はデータのダウンロードでビジーです。ビジー状態の間、 s とスレッドのスリープNSOperation
という形で、ダウンロードが完了するのを待つコードがあります。NSRunLoop
特にこのコードは私にとって興味深いものです:
while (aCertainConditionIsTrue && [self isCancelled]==NO) {
if(![[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]){
[NSThread sleepForTimeInterval:1.0];
}
}
実行ループについて読みましたがrunMode:beforeDate:
、入力ソースまたはタイムアウトを待ちます。私は100%ではありませんが、入力ソースとしてカウントされます.
これを最初に実行すると、常に NO が返され、sleepForTimeInterval:
. これは悪いですか?
特定のユーティリティ クラスでは、sleepForTimeInterval:
スレッドごとに 1 回ずつ多くのヒットが発生し、パフォーマンスが大幅に低下します。
これに対するより良い解決策、またはアドバイスはありますか?