有人说必须在主线程中使用 UIApplication ,但我没有在 Apple 的文档中看到这一点。那么有人可以告诉我在单独的线程中使用 UIApplication 是否安全吗?如果它不安全,这在哪里记录?
编辑: 我专注于那些操纵本地通知的方法。
有人说必须在主线程中使用 UIApplication ,但我没有在 Apple 的文档中看到这一点。那么有人可以告诉我在单独的线程中使用 UIApplication 是否安全吗?如果它不安全,这在哪里记录?
编辑: 我专注于那些操纵本地通知的方法。
大多数 UIKit 类都不是线程安全的。这已在 WWDC 等上详细讨论过,但没有很好的记录。我能找到的最好的是TN2109,它反复讨论了如何不允许从辅助线程调用 UIKit。
请注意,此规则有许多记录在案的例外情况。例如,UIApplication 上的beginBackgroundTaskWithExpirationHandler和相关方法被明确标记为可以安全地从非主线程调用。(这也意味着 UIApplication 的其他方法从其他线程调用是不安全的,因为这些是专门调用的。)
此规则也有其他例外,主要涉及绘图(UIImage 和 UIColor 实例是线程安全的,至少从iOS 4开始)。
UIApplication 是 UIResponder 的子类,是 UIKit 框架的一部分。所以我猜它不是线程安全的,因为据记载 UIKit 类不是线程安全的。
它还具有诸如 setStatusBarOrientation:animated: 之类的方法,它们都是基于 UI 的,并且绝对不能在主线程之外的另一个线程中调用。