CHAPTER13 オブジェクトのコピーと保存
2011/10/15(土) 22:44 Objective-C親記事へこのエントリーをはてなブックマークに追加

浅いコピーと深いコピー

オブジェクトのポインタをコピーするshallow copyと、新たなメモリ領域を持つポインタを作る深いコピーdeep copyがある。

ゾーンについて

copyWithZoneメソッドというようにゾーンは今も名残が残っている。
動的なメモリ確保のヒープ領域はアドレス空間では幅広く使われたりしますが、空間的な局所参照性や仮想空間などアクセスが集中する系のデータの場合はある程度近い場所に配置したほうが効率が良くなります。
このヒープ領域をある程度区切って、関係の深いデータやオブジェクトはその区間=ゾーンを利用できるようにしていました。
現在はデフォルトゾーンでも十分効率化されているため殆ど明示的に使うことはなくなりました。^

コピーメソッドの定義

Objective-CのNSObjectにはcopyメソッドがあり、新しいインスタンスを作成できます。
しかし、copyメソッドの実体はcopyWithZoneというインスタンスメソッドで、デフォルトゾーンに新たにインスタンスを作成します。
copyWithZoneはNSCopyingプロトコルで実装されてる。

オブジェクトのアーカイブ化

属性値や相互関係も含めてオブジェクトをバイト列に変換されたものをアーカイブという。
複合手段はアンアーカイブといい、これはNSCoderのサブクラスで定義されている。

プロパティリスト

ASCII、XML,バイナリの3形式がある。
プロパティリスト全体をNSDictionaryのインタンスに格納した時、これをルート辞書とよび、この辞書のキーは文字列でないと行けない。
ASCIIはOPENSTEPからの互換性のために存在し、このplistデータからオブジェクト構造を複合するには
propertyListメソッドを使用します。
バイナリデータ<16>と(配列)、辞書を合わせた形。

XML形式のプロパティリスト

writeToFile/ContentsOfFileで読み書きができる。

名前:  非公開コメント   

  • TB-URL  http://efcl.info/adiary/0137/tb/