5

AppDelegate はスレッドセーフなのだろうか? 現在、セカンダリ スレッドでネットワーク タスクを実行する操作を行っています。タスクの開始時に に設定し、タスクの完了時に に設定NetworkActivityIndicatorVisibleしたいと考えています。常にメインスレッドで呼び出す必要がありますか、それとも現在の実行ループスレッドで実行できますか?YESNO

ありがとう

4

1 に答える 1

8

一般に、UIKit はスレッドセーフではありません。いくつかのことで「逃げる」ことができるかもしれませんが、常にメインスレッドで UIKit を実行する必要があります。十分に文書化された例外がいくつかあります。

バックグラウンド スレッドからこれを行うパターンは単純です。

dispatch_async(dispatch_get_main_queue(), ^{
    // Put any code you want to execute in the main thread here.
});

dispatch_async に渡すブロック内のコードは、メインの実行ループで実行されるようにスケジュールされます。

于 2012-08-03T18:04:59.523 に答える