0
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        while(!weakSelf.isAnotherThreadCompleted && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]])
            ;
         [weakSelf doSomething];

    });

このように非同期スレッドを別のスレッドを待機させるのは正しいですか?

4

1 に答える 1

1

に対応するグローバル キューを停止しようとしていますDISPATCH_QUEUE_PRIORITY_DEFAULT。このキューに何か他のものをディスパッチすると、待機が完了するまで実行されません。

また、このディスパッチ キューに対応するスレッドには実行ループが存在しないと思いますので、呼び出して作成し- currentRunLoop、ソースが関連付けられていないため、すぐに値NO(または、ランダムな実行ループが発生し、動作が完全に予測不能になります)。

作業スレッドの最後でブロックを呼び出してみませんか? それとも、1 つのメカニズム (GCD、NSOperation、スレッド、実行ループ) とそれに伴う同期のみを使用し、それらを混合するのではありませんか?

于 2013-03-21T12:07:03.910 に答える