2012-10-29 12 views
8

私はアプリケーションでGCDや多くのスレッドを使用していませんが、別のスレッドからメソッドを実行する必要がある状況に遭遇しました。このメソッドが完了したら、コールバックのメインスレッドを使用して別のメソッドを呼び出す必要があります。私は、スレッドが操作を終了したが、それでも対象についてあまり明確ではないことを検出する方法を調べています。IOS Grand Central Dispatch with callback method

私はテストアプリケーションを作成し、すぐに簡単な例として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)の終了後にコールバックメソッドが呼び出されたように見えます。これはこの状況を処理する適切な方法ですか、私はコースから離れていますか?

+2

うん、うまくいくはずです。 – geraldWilliam

+0

すみません、返信ありがとう!@mattは追加のリンクもありがとうございます。とても有難い! – tg2007

答えて

6

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

そして、これは非常にのように構造化私の本からのサンプルコードのためのhttps://stackoverflow.com/a/13080519/341994:その例で

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

drawThatPuppyは時間を行うには、メインスレッドをオフに取得する方法を見て計算を消費し、メインスレッドに戻ってインタフェースに描画を行います。

関連する問題