0

これは私のコードが今どのように見えるかであり、私はこれらのメソッドをシリアルに呼び出したいと思います:

-(void) methodOnBackThread // this method will run on a background thread
{
    [runner runThisMethod]; // and this will run on the same background thread as well

    [runner runThisOtherMethod]; // and so will this one

    // but I want this one to run on the main thread :       
    [runner runThisMethodOnTheMainThreadUsing:thisParameter using:thisOtherParamater andUsing:thisOtherOneAsWell]; 

    [runner runThisOtherMethod]; // this one will run on the background thread as well


     // but I want this one to run on the main thread :       
    [runner runThisMethodOnTheMainThreadUsing:thisParameter using:thisOtherParamater andUsing:thisOtherOneAsWell]; 

    [runner runThisOtherMethod]; // this one will run on the background thread as well

    // etc..

}

私は使用する必要dispatch_get_main_queueがあると思いますが、上記の場合にこれを実装する方法がわかりません。

メインスレッドに送信[runner runThisMethodOnTheMainThreadUsing:thisParameter using:thisOtherParamater andUsing:thisOtherOneAsWell];してから、残りのバックグラウンドメソッドの実行に戻り、次のメソッドで必要になった場合にメインスレッドを再度取得するにはどうすればよいですか?

4

2 に答える 2

3

iOS4以降をターゲットにしている場合グランドセントラルディスパッチを使用します。あなたはこのようなことをすることができます:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //do some stuff here in the background
    dispatch_async(dispatch_get_main_queue(), ^{
        //do some stuff here in the main thread
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
           //do some stuff here in the background after finishing calling a method on the main thread
    });
    });
});
于 2012-08-23T19:00:05.123 に答える
1

dispatch_get_main_queue次のように使用できます。

dispatch_async(dispatch_get_main_queue(), ^{
        if (backgroundTask != UIBackgroundTaskInvalid)
        {
            [runner runThisMethodOnTheMainThreadUsing:thisParameter using:thisOtherParamater andUsing:thisOtherOneAsWell];
        }
    });

このリンクdispatch確認してください

于 2012-08-23T19:11:41.943 に答える