6

メインスレッドで UIApplication を使用する必要があると言う人もいますが、これは Apple のドキュメントに記載されていません。別のスレッドで UIApplication を使用しても安全かどうか教えてください。安全でない場合、これはどこに文書化されていますか?

編集: ローカル通知を操作するメソッドに焦点を当てています。

4

2 に答える 2

6

ほとんどの UIKit クラスはスレッドセーフではありません。これは WWDC などで詳細に議論されていますが、十分に文書化されていません。私が見つけることができる最高のものはTN2109で、セカンダリスレッドからの UIKit の呼び出しが許可されていないことを繰り返し説明しています。

この規則には多くの文書化された例外があることに注意してください。たとえば、UIApplication のbeginBackgroundTaskWithExpirationHandlerおよび関連するメソッドは、非メイン スレッドから呼び出しても安全であると明確にラベル付けされています。(これは、UIApplication の他のメソッドが他のスレッドから安全に呼び出されないことも意味します。これらは明確に呼び出されるためです。)

このルールには他にも例外があり、主に描画が関係しています (少なくともiOS 4では、UIImage および UIColor インスタンスはスレッドセーフです)。

于 2012-12-10T02:15:02.003 に答える
0

UIApplication is a subclass of UIResponder and is part of the UIKit framework. So I guess it is not thread safe because it is documented that UIKit classes are not thread safe.

Also it has methods like – setStatusBarOrientation:animated:, which are all UI based and those definitely cannot be called in another thread than the main thread.

于 2012-12-10T01:50:28.953 に答える