我有Cocoa中包含Quartz-2D引用(描述颜色,填充图案,渐变和阴影)的对象。我想在我的对象中实现NSCoding
协议,因此需要序列化那些不透明的Quartz-2D结构。复制和序列化Quartz引用的最佳实践
可能的解决方案可能是:
在我的对象,允许设置数据结构从头开始,只要在需要的时候定义一组属性。那些可以轻松地序列化。 示例:存储红色,绿色,蓝色和alpha的四个浮标,然后使用
CGColorCreate
。 缺点:重复信息,从而潜在的一致性和(至今很小的)空间消耗问题。我需要手动编写属性设置器,以便在组件更改时重新创建Quartz结构。这会使我的代码大幅膨胀。使用Quartz函数读出属性。 示例:对于颜色使用
CGColorGetComponents
。 缺点:它似乎适用于颜色。但是对于其他结构没有相同的功能,所以我不了解它如何适用于渐变,阴影,阴影等。直接从原始不透明结构读出属性。 缺点:正如文件所述,结构应该是不透明的。所以万一有什么变化的话,我的代码就会崩溃。 (如果应该这样做,Apple肯定不会提供像
CGColorGetComponents
这样的功能。)此外,诸如CGShadingRef
内部的CGFunctionRef
之类的东西实际上是在寻求麻烦。
序列化石英结构的最佳实践是什么?
谢谢,这确实非常详细和有用。不幸的是,似乎没有办法避免为我感兴趣的对象重复编码信息。如果你没有提醒我,我会忘记CGColor的颜色空间,特别感谢你这个! – user8472 2010-10-16 22:30:04