UIView的-drawRect:是否必须在主线程上调用?

是否必须在主线程上绘制UIView的-drawRect:方法,或者可以在不同的运行循环中的自定义视图上使用CADisplayLink调用-setNeedsDisplay

所有的UIKit调用应该在主线程上完成。

从iOS 4.0开始 ,您可以在后台线程中绘制UIView的-drawRect:

  • 在UIKit中绘制graphics上下文现在是线程安全的。 特别:
    • 用于访问和操作graphics上下文的例程现在可以正确地处理驻留在不同线程上的上下文。
    • string和图像绘制现在是线程安全的。
    • 在多个线程中使用颜色和字体对象现在是安全的。

在iOS 4.0中,也可以参考技术问答QA1637中的相关评论。

之前的任何版本的iOS仍然需要在主线程上绘制该图。