35

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

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

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

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

編集:

Alladinianに感謝します。

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

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

4

2 に答える 2

100

それは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のドキュメントをご覧ください。

于 2012-10-01T09:59:11.950 に答える
8

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

[self performSelectorInBackground:@selector(someMethod:) withObject:nil];
于 2012-10-01T11:39:15.503 に答える