我在Cocoa中有包含Quartz-2D参考(描述颜色,填充图案,渐变和阴影)的对象。我想在我的对象中实现NSCoding
协议,因此需要序列化那些不透明的Quartz-2D结构。
可能的解决方案可能是:
在我的对象中定义一组属性,允许在需要时从头开始设置数据结构。那些可以很容易地序列化。 示例:为红色,绿色,蓝色和alpha存储四个浮点数,然后使用CGColorCreate
。 缺点:信息重复,因此潜在的一致性和(迄今为止较小的)空间消费问题。我需要手动编写属性设置器,以便在组件发生更改时重新创建Quartz结构。这会大大增加我的代码。
使用Quartz函数读出属性。 示例:使用CGColorGetComponents
颜色。 缺点:它似乎适用于颜色。但是没有其他结构的等效功能,所以我不知道它如何适用于渐变,阴影,阴影等。
直接从原始的不透明结构中读出属性。 缺点:正如文档所说,结构应该是不透明的。因此,如果发生了变化,我的代码就会破裂。 (Apple当然不会提供类似CGColorGetComponents
的功能,如果应该这样做的话。)此外,CGFunctionRef
内的CGShadingRef
之类的东西真的会有问题。
序列化Quartz结构的最佳实践是什么?
答案 0 :(得分:5)
答案几乎因一个班级而异:
TIFFRepresentation
方法。)