2012-12-10 2 views
5

メインスレッドでUIApplicationを使用しなければならないと言う人もいますが、これはAppleのドキュメントには記載されていません。 別のスレッドでUIApplicationを使用するのが安全かどうか教えてください。それが安全でない場合、これはどこに文書化されていますか?iOS:メインスレッドセーフ以外のスレッドでUIApplicationのメソッドを呼び出していますか?

編集: 私はローカル通知を操作する方法に焦点を当てています。

+0

あなたが使いたい方法についてより具体的であれば、助けになります。 – rmaddy

+0

@rmaddyありがとう、私が検査しているメソッドを追加しました。 – CarmeloS

答えて

5

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

このルールには多くの文書化された例外があることに注意してください。たとえば、beginBackgroundTaskWithExpirationHandlerとそれに関連するUIApplicationのメソッドは、非メインスレッドから安全に呼び出すことができると明確にラベル付けされています。 (これはまたのUIApplicationの他の方法は、これらを具体的にアウトと呼ばれているので、他のスレッドから呼び出すことが安全ではないことを意味します。)

この規則の他の例外は、主に(UIImageを描く含む、そこにもあり、 UIColorインスタンスは、少なくともiOS 4のようにスレッドセーフです。

0

UIApplicationはUIResponderのサブクラスであり、UIKitフレームワークの一部です。だから、UIKitクラスはスレッドセーフではないことが文書化されているので、スレッドセーフではないと思います。

また、setStatusBarOrientation:animated:などのメソッドがあります。これらはすべてUIベースであり、メインスレッド以外のスレッドでは呼び出せません。

+0

UIを操作するときは、メインスレッド上にある必要がありますが、すべてのUIApplicationメソッドがUIを操作するわけではありません。他のスレッドで使用している場合は問題ありません。 – sosborn

+0

私は自分の質問を編集しました。私はローカルの通知を操作するメソッドに焦点を当てています。 – CarmeloS

関連する問題