0

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

目前我正在使用 GCD 队列来序列化读取和写入层的任务。这确保了后台进程永远不会在主线程使用CGContextDrawLayerAtPoint(). 但是,这会花费我一些性能。

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

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

4

1 回答 1

0

好的,所以在做了一些测试后,我可以说问题 (2) 的答案是否定的,让两个不同的进程同时写入同一个进程是不安全CGLayer的。

当我尝试CGContextFillRect()在同一层上同时执行两个操作时,应用程序异常终止并以EXC_BAD_ACCESS() code=1.

然而,问题 (1) 的答案是,在后台进程仍在写入时同时读取似乎是可以的。CGLayer例如,这是在后台进程正在用蓝色方块覆盖所有红色方块的过程中读取图层的结果。在此处输入图像描述

于 2016-07-30T12:48:53.740 回答