UIKit绘图是线程安全的:你如何获得图形上下文?

因此,正如本答案和iOS 4.0发行说明中所述 ,UIKit现在有一些线程安全的绘图工具:

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

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

这很好,但是你如何使用它?

据我所知,任何时候你都不在-drawRect:如果你通过UIGraphicsBeginImageContext()UIGraphicsPushContext()创建了自己的上下文,你只能使用UIKit / UIGraphics绘制,但这些函数不是根据文档线程安全,并且总是在主线程上调用-drawRect()

我假设在主线程上创建一个图像上下文然后启动后台方法将是一个非常糟糕的主意,因为竞争条件很多。

那么,我如何使用iOS 4中引入的基于multithreadingUIKit的绘图内容? 我错过了什么其他方式获得活跃的UIKit图形上下文?

PS我知道我可以使用Core Graphics进行绘制并完成它。 由于各种原因(遗留代码),我想继续使用基于UIKit的绘图方法。

基于尝试它并基于各种文档的一些经验,我的信念是UIGraphicsPushContext()的文档是不正确的。

我相信UIGraphicsPushContext()实际上是线程安全的。 QA1637表示“从iOS 4.0开始,在UIKit中绘制图形上下文是线程安全的。”这包括访问和操作当前图形堆栈 ,绘制图像和字符串以及颜色的使用和来自辅助线程的字体对象。“ (强调我的)

我承认,假设线程安全与文档相矛盾,这总是一个冒险的主张。 但我相信这是一个文档错误。 我打开了rdar:// 11161530来跟踪它。 请欺骗。