什么需要在主线程?

Dan*_*ark 6 uikit ios

我写了一个名为ensureInMainThread的小定义(我用了很多).但是,我不确定在主线程上需要调用哪些用户界面方法.怎么样setNeedsDisplaysetNeedsLayout?对于需要在iOS 5.x中的主线程上调用的方法,经验法则是什么?

这些问题是相关的(一些低质量的问题和答案,以及一些非常具体的案例),但我想要一个全面,单一的好答案:

Bra*_*son 9

从iOS 4.0开始,可以在后台线程上执行一些用户界面更新:

  • 在UIKit中绘制图形上下文现在是线程安全的.特别:

    • 用于访问和操作图形上下文的例程现在可以正确处理驻留在不同线程上的上下文.

    • 字符串和图像绘制现在是线程安全的.

    • 现在可以安全地使用多个线程中的颜色和字体对象.

David Duncan在这里的评论中证实了这一点.

除此之外,关于UIKit的其他所有内容都不被认为是线程安全的,因此在这些情况下你应确保在主线程上与它进行交互.

顺便说一下,我更喜欢链接的宏上使用基于块的"始终在主线程上运行"的实现,因为我喜欢显式包装需要在主线程上运行的代码.