0

dispatch_asyncネットワーク リクエスト (JSON や XML など) からのデータの解析など、バックグラウンド スレッドの作業単位にGCD を使用したことがありますが、これは素晴らしいことです。しかし、アプリケーションの期間中実行されるバックグラウンド タスクがある場合はどうなるでしょうか。dispatch_asyncこのケースにまだ適していますか、それを実装するためのより良い方法はありますか?

4

2 に答える 2

3

わかりましたが、独自のディスパッチ キューを作成してください。(グローバル キューを使用する場合は、そのキュー (またはそのスレッドの 1 つ) を永久に拘束する可能性があります。)

dispatch_queue_t dispatchQueue = dispatch_queue_create("com.mycompany.myapp.ForeverOperation", DISPATCH_QUEUE_SERIAL);
dispatch_async(dispatchQueue, ^{
    // worker routine 
});

より伝統的には、これに対して明示的なスレッドを作成し、それが永久に実行される場合は、より「理にかなっている」可能性があります。しかし、結果は基本的に同じです。

NSThread * myWorkerThread = [[NSThread alloc] initWithTarget:...
[myWorkerThread start];

いつものように、他のスレッド/キューと通信する必要がある場合は、標準の同期技術が必要になる場合があります。

于 2013-02-15T22:16:59.813 に答える
1

これはdispatch_async、バックグラウンド スレッドで何かを実行するための 1 つのアプローチにすぎない とはまったく関係ありません。バックグラウンド スレッドで何かをしたい場合は、バックグラウンド スレッドで実行してください。処理時間とプロセッサの数が非常に限られているため、これを常に行うとアプリの負担になる可能性があることに注意してください。楽器でそれを勉強しなければならなくなるかもしれません。タスクを少しずつ分割して、ときどき短いチャンクで実行することをお勧めします。GCD と NSOperation の両方がこれに役立ちます。

于 2013-02-15T22:17:24.793 に答える