Cocoa に Quartz-2D 参照 (色、塗りつぶしパターン、グラデーション、および影を記述する) を含むオブジェクトがあります。NSCoding
オブジェクトにプロトコルを実装したいので、これらの不透明な Quartz-2D 構造をシリアル化する必要があります。
可能な解決策は次のとおりです。
必要なときにいつでもデータ構造を最初からセットアップできるようにする、オブジェクトの一連のプロパティを定義します。これらは簡単にシリアル化できます。例:赤、緑、青、およびアルファの 4 つの float を格納してから、 を使用します
CGColorCreate
。短所:情報の重複により、潜在的な一貫性と (これまでのところマイナーな) スペース消費の問題。コンポーネントが変更されるたびに Quartz 構造を再作成するプロパティ セッターを手動で記述する必要があります。それは私のコードを大幅に肥大化させます。Quartz 関数を使用してプロパティを読み取ります。例:色に使用
CGColorGetComponents
します。短所:色には効果があるようです。しかし、他の構造には同等の機能がないため、グラデーション、シェーディング、シャドウなどに対してこれがどのように機能するかわかりません.生の不透明な構造からプロパティを直接読み取ります。欠点:ドキュメントにあるように、構造は不透明であると想定されています。そのため、内部で何かが変更された場合、私のコードは壊れます。(Apple がそのような機能を提供することになった場合、そのような機能を提供しなかったことは確か
CGColorGetComponents
です。) さらに、CGFunctionRef
内部の a のようなものは、CGShadingRef
本当にトラブルを求めているでしょう。
Quartz 構造をシリアライズするためのベストプラクティスは何ですか?