8

アプリでGCDや多くのスレッドを使用したことはありませんが、別のスレッドから1つまたは2つのメソッドを実行する必要がある状況に遭遇しました。このメソッドが完了したら、コールバックからメインスレッドを使用して別のメソッドを呼び出す必要があります。私はスレッドが操作を終了したことを検出する方法を探し回っていますが、それでも主題についてはあまり明確ではありません。

テストアプリを作成し、簡単な例としてviewDidLoadメソッドを使用しました。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        NSLog(@"viewDidLoad called");
        sleep(5);  // simulating a thread being tied up for 5 seconds


        dispatch_async(dispatch_get_main_queue(), ^{
            [self callbackMethod];  // method called after above thread has completed running
        });

    });


}

この例は、私がやろうとしていることに対して機能しますか?アプリケーションを実行すると、sleep(5)が終了した後にコールバックメソッドが呼び出されたように見えます。これはこの状況に対処するための適切な方法ですか、それとも私はコースから外れていますか?

4

1 に答える 1

6

あなたはその場にいます。これがメインスレッドを降りるための標準的なパターンです。ここで私の答えを参照してください:https ://stackoverflow.com/a/13080519/341994

そして、例えば私の本のコードは、まさにこのように構成されています。

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch25p868mandelbrotGCD/ch38p1106mandelbrotNoThreading/MyMandelbrotView.swift

その例でdrawThatPuppyは、時間のかかる計算を行うためにメインスレッドを降りてから、インターフェイスへの描画を行うためにメインスレッドに戻る方法を見てください。

于 2012-10-29T04:03:02.077 に答える