11

次のような非同期タスクがあります。

dispatch_async(dispatch_get_main_queue(), ^{
     myAsyncMethodsHere;
});

バックグラウンド タスクが完了したときに通知を受ける方法はありますか?

または、完了時にメソッドを呼び出すには?

私はドキュメントを読み、dispatch_after を調べましたが、一定時間後にメソッドをディスパッチするように設計されているようです。

助けてくれてありがとう。

4

1 に答える 1

15

ドキュメントから:

完了コールバック

完了コールバックは、dispatch_async() 関数へのネストされた呼び出しによって実行できます。dispatch_async() への最初の呼び出しの前に宛先キューを保持し、完了コールバックの最後にそのキューを解放して、完了コールバックが保留されている間に宛先キューが割り当て解除されないようにすることを忘れないでください。例えば:

 void
 async_read(object_t obj,
         void *where, size_t bytes,
         dispatch_queue_t destination_queue,
         void (^reply_block)(ssize_t r, int err))
 {
         // There are better ways of doing async I/O.
         // This is just an example of nested blocks.

         dispatch_retain(destination_queue);

         dispatch_async(obj->queue, ^{
                 ssize_t r = read(obj->fd, where, bytes);
                 int err = errno;

                 dispatch_async(destination_queue, ^{
                         reply_block(r, err);
                 });
                 dispatch_release(destination_queue);
         });
 }

ソース

于 2010-07-31T17:02:39.393 に答える