web-dev-qa-db-ja.com

目的cの関数をバックグラウンドスレッドに移動する

IPhoneで計算するのに15秒かかる文字列を返す関数があります。

メインスレッドをユーザーインターフェイスに使用できるように、バックグラウンドスレッドで関数を実行できるようにします。

GCDはこれに適した新しいテクノロジーだと聞いたことがありますが、これがどのように機能するかについてサンプルコードを提供できますか?

つまり、バックグラウンドスレッドで汎用関数を実行し、結果をUIテキストフィールドに返します。

編集:

Alladinianに感謝します。

ただし、GCDを使用すると、関数はiphoneシミュレーターで実行するのに1秒長くかかります(iphoneで約5秒になると思います(確認のために今日は後でテストする必要があります))

これには理由がありますか?おそらく、バックグラウンドスレッドが遅いか何かですか?

26
MoKaM

GCDを使用すると、実際には非常に簡単です。典型的なワークフローは次のようなものです。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
    // Perform async operation
    // Call your method/function here
    // Example:
    NSString *result = [anObject calculateSomething];
    dispatch_async(dispatch_get_main_queue(), ^{
        // Update UI
        // Example:
        self.myLabel.text = result;
    });
});

GCDの詳細については、 Appleのドキュメントはこちら をご覧ください。

87
Alladinian

また、GCDを使用する必要がない場合もありますが、これは非常に簡単に使用できます。

[self performSelectorInBackground:@selector(someMethod:) withObject:nil];
6
Trausti Thor