我有Cocoa中包含Quartz-2D引用(描述顏色,填充圖案,漸變和陰影)的對象。我想在我的對象中實現NSCoding
協議,因此需要序列化那些不透明的Quartz-2D結構。複製和序列化Quartz引用的最佳實踐
可能的解決方案可能是:
在我的對象,允許設置數據結構從頭開始,只要在需要的時候定義一組屬性。那些可以輕鬆地序列化。 示例:存儲紅色,綠色,藍色和alpha的四個浮標,然後使用
CGColorCreate
。 缺點:重複信息,從而潛在的一致性和(至今很小的)空間消耗問題。我需要手動編寫屬性設置器,以便在組件更改時重新創建Quartz結構。這會使我的代碼大幅膨脹。使用Quartz函數讀出屬性。 示例:對於顏色使用
CGColorGetComponents
。 缺點:它似乎適用於顏色。但是對於其他結構沒有相同的功能,所以我不瞭解它如何適用於漸變,陰影,陰影等。直接從原始不透明結構讀出屬性。 缺點:正如文件所述,結構應該是不透明的。所以萬一有什麼變化的話,我的代碼就會崩潰。 (如果應該這樣做,Apple肯定不會提供像
CGColorGetComponents
這樣的功能。)此外,諸如CGShadingRef
內部的CGFunctionRef
之類的東西實際上是在尋求麻煩。
序列化石英結構的最佳實踐是什麼?
謝謝,這確實非常詳細和有用。不幸的是,似乎沒有辦法避免爲我感興趣的對象重複編碼信息。如果你沒有提醒我,我會忘記CGColor的顏色空間,特別感謝你這個! – user8472 2010-10-16 22:30:04