是否有必要在OSX中序列化对CGLayer的读/写访问?

时间:2016-07-29 20:41:14

标签: macos concurrency core-graphics cglayer

我的Mac OSX应用程序有一个后台进程,使用Core Graphics将2D线条和区域绘制到CGLayer。然后通过displayRect()子类的NSView方法定期向用户显示。

目前我正在使用GCD队列来序列化对图层进行读写的任务。这可以确保后台进程永远不会在主线程使用CGContextDrawLayerAtPoint()将其绘制到视图中的同时绘制它。然而,这让我有一些表现。

问题1: R / W序列化是否可以访问应用稳定性所需的CGLayer? (我不介意奇怪的错误显示图像,但我不想冒险崩溃)。

问题2:如果我要将绘图任务拆分为多个并发进程,是否可以安全地允许他们同时写入该层,或者我是否需要将它们序列化(这会使并发性变得毫无意义)?

1 个答案:

答案 0 :(得分:0)

好了,所以做了一些测试我可以说问题(2)的答案是 NOT 安全让两个不同的进程同时写入同一个{ {1}}。

当我尝试在同一层上同时执行两个CGLayer操作时,应用程序以CGContextFillRect()异常终止。

然而问题(1)的答案是, DOES 似乎可以在后台进程仍在编写时同时读取EXC_BAD_ACCESS() code=1。例如,这是在后台进程覆盖所有红色方块的过程中读取图层的结果。enter image description here