29

場合によっては UI を変更するメソッドがあります。

例えば:

-(void) myMethod {

  if(someExpressionIsTrue) {
    // make some UI changes
    // ...
    // show actionSheet for example
  }
}

時々から時々 からmyMethod呼び出されます。mainThreadother thread

だからこそ、これらのUIの変更は確実にmainThread.

この方法で必要な部分を変更しましmyMethodた:

if(someExpressionIsTrue) {
     dispatch_async(dispatch_get_main_queue(), ^{
        // make some UI changes
        // ...
        // show actionSheet for example
      });
}

だから質問:

  • dispatch_async(dispatch_get_main_queue() メインスレッドで呼び出すのは安全で良い解決策ですか? パフォーマンスに影響しますか?
  • この問題は他のより良い方法で解決できますか? メソッドを使用してメインスレッドであるかどうかを確認し、他のスレッドの場合にのみ[NSThread isMainThread]呼び出すことができることはわかっていますが、これらの UI の更新でメソッドまたはブロックをもう 1 つ作成する必要があります。dispatch_async
4

2 に答える 2

39

メイン キュー内からメイン キューに非同期ブロックを追加しても問題はありません。後で実行ループでメソッドを実行するだけです。

絶対にやりたくないことはdispatch_sync、メイン キュー内からメイン キューにブロックを追加することを呼び出すことです。自分自身をロックしてしまうからです。

于 2013-09-17T11:25:08.097 に答える