iOSのメインスレッドでUI関連の作業を実行する必要があります。 }uikitメソッドはメインスレッド上で実行されますか?
;)dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
UIImage *overlayImage = [self faceOverlayImageFromImage:_image];
dispatch_async(dispatch_get_main_queue(), ^{
[self fadeInNewImage:overlayImage];
});
}:時々、私たちは、画像をダウンロードするようないくつかの非同期ジョブを実行する必要があり、我々は、おそらくdispatch_asyncを使用すると、ダウンロードが完了したら、我々はメインスレッドを取得し、このような何かのようにそれを表示するとき
しかし、我々はローカルにイメージをロードするとき、我々は通常、ちょうどメインスレッドにディスパッチすることなく、次の操作を行います。私の質問は、彼らがメインスレッド上で実行されることが保証されている
UIImageView *imageView = [[UIImageView alloc] initWithImage:@"myimage.png"];
?はいの場合、なぜdispatch_get_main_queue()を使用してディスパッチする必要がありますか?どうして私たちはメインスレッド上のすべての関連作業をディスパッチする必要はありませんか?
説明:ディスパッチを使用する必要がある理由は、*あなたがバックグラウンドスレッドを開始し、そのスレッドがUIを変更する必要があるためです。 UIの切り替えがUIスレッドへの切り替えを処理するコールバック(プログレスバーのsetProgressなど)を介して行われない限り、ディスパッチを使用する必要があります。 – ToolmakerSteve