2

さまざまなデータを使用して数学演算を繰り返し(場合によっては数百万回)実行する方法があります。iOSでこれを行うための最良の方法は何ですか(iPadデバイスで実行されます)?performSelectorOnBackgroundThread私はそれが非推奨であることを理解しています...?また、すべての結果をに集約する必要がありNSArrayます。最善の方法は、通知センターに通知を投稿し、オブザーバーとしてメソッドを追加することです。これは正しいです?配列はアトミックとして宣言する必要があると思います...さらに、操作が完了するとプログレスバーを表示する必要があります...並行して開始できるスレアの数はいくつですか?1.000.000スレッドを開始することは、iDeviceではそれほど良い考えではないと思います。

前もって感謝します...

4

2 に答える 2

4

Grand Central Dispatchを調べてください。これは、iOS (および Mac) でマルチスレッドを実行するための推奨される方法です。

GCD を使用する簡単な例は次のようになります。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    //do long running task here
}

これにより、メインスレッドとは非同期にブロックが実行されます。GCD には他にもタスクをディスパッチする方法が多数あります。上記のウィキペディアの記事から直接引用したものは次のとおりです。

dispatch_apply(count, dispatch_get_global_queue(0, 0), ^(size_t i){
     results[i] = do_work(data, i);
    });
total = summarize(results, count);

この特定のコード サンプルは、おそらくまさにあなたが探しているものです。あなたのこの「大きなタスク」が恥ずかしいほど並列であると仮定します。

于 2013-01-09T16:19:18.967 に答える
3

dispatch_apply()すべての実行を同時に使用してスピンオフすることはできますが、それは遅くなります。

同時に計算する必要があるものである同時計算の数と同時に、飛行中の実行の数を調整できるようにする必要があります。

私はよく、dispatch_semaphore_t飛行中の計算の数を簡単に調整できるようにするためにを使用しました。

そうすることの詳細はここの答えにあります:https ://stackoverflow.com/a/4535110/25646

于 2013-01-09T17:29:46.113 に答える