4

NSOperationによって管理されるいくつかのオブジェクト内でいくつかのコードを実行していNSOperationQueueます。コードには、 を使用した遅延メソッド呼び出しも含まれていますperformSelector:withObject:afterDelay:

問題は、遅延して呼び出されるべき対応するセレクターがまったく呼び出されないことです。

StackOverflow question に対するこの回答を読んだ後、NSOperationすでに終了しており、そのスレッドがもう存在していないという事実が原因であり、セレクタへのスケジュールされた呼び出しを「忘れて」いると思います。

どうすればこれを回避できますか? 内のメソッドへの遅延呼び出しを行うにはどうすればよいNSOperationですか?

4

1 に答える 1

4

1 つの可能性は、Grand Central Dispatch を使用することdispatch_after()です。

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after(popTime, queue, ^{
    ...
});

の代わりにdispatch_get_global_queue()、もちろん独自のディスパッチ キューを作成したり、メイン キューを で使用したりすることもできますdispatch_get_main_queue()

于 2011-12-30T15:02:42.710 に答える