2012-12-10 66 views
5

有人说在主线程中必须使用UIApplication,但我没有在Apple的文档中看到这一点。 那么有人可以告诉我,如果在单独的线程中使用UIApplication是否安全?如果它不安全,在哪里记录?iOS:正在调用主线程安全以外线程中的UIApplication方法吗?

编辑: 我正在关注那些操纵本地通知的方法。

+0

如果你对你想使用的方法更具体,这将有所帮助。 – rmaddy

+0

@rmaddy谢谢你,我已经添加了我正在检查的那些方法。 – CarmeloS

回答

5

大多数UIKit类不是线程安全的。在WWDC等已经详细讨论过这个问题,但没有很好的文档记录。我能找到的最好的是TN2109,它反复讨论如何从辅助线程调用UIKit是不被允许的。

请注意,此规则有许多记录的例外情况。例如,UIApplication上的beginBackgroundTaskWithExpirationHandler和相关方法明确标记为可安全地从非主线程调用。 (这也意味着UIApplication的另一方法是安全地从其他线程调用,因为这些是专门叫了。)

还有其他一些例外的情况为好,大部分涉及绘画(UIImage的,并UIColor实例至少为iOS 4)是线程安全的。

0

UIApplication是UIResponder的一个子类,是UIKit框架的一部分。所以我想它不是线程安全的,因为它被记录为UIKit类不是线程安全的。

另外它也有像 - setStatusBarOrientation:animated:这样的方法,它们都是基于UI的,而且这些方法绝对不能在主线程之外的另一个线程中调用。

+0

当您操作UI时,它必须位于主线程上,但并非所有UIApplication方法都可以操作UI。在那些使用其他线程的情况下很好。 – sosborn

+0

我编辑了我的问题,我专注于处理本地通知的方法。 – CarmeloS

相关问题