2
     dispatch_async(dispatch_get_main_queue(), ^{
         [self.teamName becomeFirstResponder];
     });

私は友人とチャットしていて、dispatch_asyncの使用はあまり良くないと聞いたと彼は言ったが、彼はその理由がわからなかった。

Googleをチェックしましたが、このコードが間違っている理由は見つかりませんでした

このコードをどのように改善できますか?これを行うためのより良い方法はありますか?

注:私はまだiOSプログラミングを学んでいるので、このすべてに不慣れです。

4

2 に答える 2

5

あなたの友人は、dispatch_asyncが「悪い」と誤解しています。

しかし、他のプロセッサに、becomeFirstResponderのように簡単なことをするように依頼しても意味がありません。ディスパッチの設定には時間がかかり、ファーストレスポンダーになるのにほとんど時間がかかりません。さらに悪いことに、ファーストレスポンダーであるという副作用が、描画など、メインスレッドで実行する必要のあるものに関係している可能性がある場合。

dispatch_asyncを使用して、プロセッサまたはネットワークを集中的に使用するタスクを他のスレッドにシャトルします。特にGrandCentralDispatchについて、そして一般的に並行プログラミングについて読んでください。これは強力ですが、すべての強力なプログラミング構造と同様に、何をしているのかを理解していないと問題が発生する可能性があります。

あなたの友人が考えていたかもしれないのは、iPhoneとiPadには典型的なMacintoshほど多くのプロセッシングコアがなく、コアが1つしかないものもあるということです。これらでは、一度に複数のプロセッサを使用するメリットは得られません。ただし、Webページを非同期でフェッチするなどの理由はまだあるので、スクロールやナビゲーションアニメーションなどを中断することはありません。

于 2013-02-15T03:46:33.070 に答える
3

あなたの友達が何を言っているのかわかりませんが

dispatch_async(dispatch_get_main_queue(), ^{
     [self.teamName becomeFirstResponder];
 });

dispatch_asyncは非常に堅牢です。初めて使用する場合は、主にUIとは異なるキューでコードを集中的に実行するために使用します。これにより、UIの応答性が維持され、値(または更新する必要のある画像や関連するUI)を取得したら、次のようになります。上記のようにメインキューを呼び出すことになります。

事実に固執する..あなたの友人について心配しないでください。

于 2013-02-15T03:47:00.930 に答える