我在 Cocoa 中有包含 Quartz-2D 引用(描述颜色、填充图案、渐变和阴影)的对象。我想NSCoding
在我的对象中实现协议,因此需要序列化那些不透明的 Quartz-2D 结构。
可能的解决方案可能是:
在我的对象中定义一组属性,允许在需要时从头开始设置数据结构。然后可以轻松地对它们进行序列化。示例:为红色、绿色、蓝色和 alpha 存储四个浮点数,然后使用
CGColorCreate
. 缺点:信息重复,因此存在潜在的一致性和(到目前为止较小的)空间消耗问题。我需要手动编写属性设置器,以便在组件更改时重新创建 Quartz 结构。那会使我的代码大大膨胀。使用 Quartz 函数读出属性。示例:用于
CGColorGetComponents
颜色。缺点:它似乎适用于颜色。但是其他结构没有等效的功能,所以我看不出这如何适用于渐变、阴影、阴影等。直接从原始的不透明结构中读出属性。缺点:正如文档所说,这些结构应该是不透明的。因此,如果引擎盖下发生某些变化,我的代码将会中断。
CGColorGetComponents
(如果应该这样做,Apple 肯定不会提供这样的功能。)此外,像CGFunctionRef
inside aCGShadingRef
这样的东西真的会自找麻烦。
序列化 Quartz 结构的最佳实践是什么?