場合によってはUIを変更するメソッドがあります。
例えば:
_-(void) myMethod {
if(someExpressionIsTrue) {
// make some UI changes
// ...
// show actionSheet for example
}
}
_
時々myMethod
はmainThread
から呼び出されることもありますが、ある_other 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]
_メソッドを使用してメインスレッドであるかどうかを確認し、他のスレッドの場合にのみ_dispatch_async
_を呼び出すことができることを知っています、しかし、これらのUIの更新でもう1つのメソッドを作成したりブロックしたりします。メインキュー内からメインキューに非同期ブロックを追加しても問題はありません。実行ループでメソッドを実行するだけです。
絶対にしたくないのは、dispatch_sync
自分自身をロックしてしまうため、メインキュー内からメインキューにブロックを追加します。
メインスレッドでdispatch_asyncを呼び出しているかどうかは心配しないでください。 iOSはブロックをキューに入れ、メインスレッドでブロックを実行します。