1

コンカレンシー プログラミング ガイド (PDF 版) の 37 ページと 39 ページは矛盾しているようです。37 ページのコード スニペットでは、次のように指定されています。

if (![anOp isConcurrent])
    [anOp start];
else
    [NSThread detachNewThreadSelector:@selector(start) toTarget:anOp withObject:nil];

39ページのドキュメントに次のように記載されていることを除いて、これは問題ないように見えます。

ディスパッチ キューを使用すると、個別のスレッドで実行していたほぼすべてのタスクを実行できます。ディスパッチ キューの利点は、対応するスレッド化されたコードよりも使いやすく、これらのタスクをはるかに効率的に実行できることです。

では、detachNewThreadSelector:target:object: を呼び出す代わりに、コードが dispatch_async() を呼び出さないのはなぜでしょうか?

4

1 に答える 1

0

あなたが言っていることがわかります。それぞれの方法がうまくいくと思いますが、状況に応じて、どちらのルートに行くかを選択する必要があります。注意すべきことは、NSOperationQueues使いやすいということです。Mac osx ではGCD最適化に使用されるため、適切な選択です。iOS 4 以下ではそうではありません。GCDそのため、以前のバージョンの iOS で作業している場合は、使用を真剣に検討する必要があります。新しいものをディスパッチするとNSThread、OS はスレッドを切り替え続ける必要があり、パフォーマンスの問題になる可能性があります。GCDはプール アプローチを使用します。つまり、既存のスレッドを再利用することが適切であれば再利用します。

これがあなたを正しい方向に向けることを願っています

于 2012-06-22T08:14:32.500 に答える