6

これと同様の方法に対応するセレクタではなく、ブロックを実行できる方法はありますか?performSelectorOnMainThreadのブロックバージョン:withObject:waitUntilDone:

私は、メインスレッドで生成されないイベントを受け取る可能性のあるオブザーバを持っています。主にUI指向の場合は、メインスレッドでアクションを実行します。今、私はこれを行うために2つのメソッドを書く必要があります。一つはイベントオブザーバ、もう一つはメインスレッドで実行する必要があるコードです。

可能であれば、私はこれをすべて1つの方法にカプセル化したいと思います。あなたはwaitUntilDone:NOに計画していた場合

dispatch_sync(dispatch_get_main_queue(), ^{ 
    // Do stuff here 
}); 

またはdispatch_async

答えて

11

マルチスレッドアクションをブロックサポートするための好ましいテクノロジは、Grand Central Dispatchと呼ばれます。あなたは、私はこの前に答えてきましたが、私は重複を見つけることができません誓うWikipediaGrand Central Dispatch (GCD) Reference

dispatch_async(backgroundQueue, ^{ 
     //background tasks 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      //tasks on main thread 
     });  
}); 
+1

[このような質問によると、これらの2つは同等ではないようです(http://stackoverflow.com/questions/9335434/whats-the-difference-between-performselectoronmainthread-and-dispatch-async-on-m)。また、UI固有の答えについては、[こちら](http://stackoverflow.com/questions/19544207/how-to-avoid-coreanimation-warning-deleted-thread-with-uncommitted-catransactio)を参照してください。 – insys

13

GCDは、トリックを行う必要があります。 main queue is guaranteedはメインスレッド上で実行されるため、UI操作は安全です。

+0

にいくつかのサンプルコードを見つけることができます。/me shrugs –

+0

素早く答えてくれてありがとう、ジョシュ。これは、私が見てきた答えです。私はこれを実装します。両方の回答に同じ時刻でタグが付いているので、私はFscheidlに緑色のチェックを与え、あなたに最高の投票を与えます。私はあなたが気にしないことを願っています。 – Jim

+2

うれしい私は助けることができます。私は何をするべきかを知っているより多くの担当者を持っているので、いいえ、重要ではありません、ありがとう。 –

関連する問題