すべての各ノードとエッジをオブジェクト自体で復元してオブジェクト グラフをデシリアライズすると (オブジェクト指向の方法で)、深刻な依存関係の問題があることがわかりました。
たとえば、オブジェクトA
が自分自身A
を参照する場合 (自己循環参照) は、復元中A
に完全な元の状態にあることを期待していることを意味します。連載当時はその状態だったので。
自己参照の場合、それ自体が復元されていることを認識しているため、検出できます。しかし、A
が別のオブジェクトを必要とする場合、他のオブジェクトも完全な元の状態でB
あることを期待する必要があります。B
オブジェクトがB
も参照A
している場合、再び への循環参照が 発生し、が復元されているA
ことを知らずに同じ問題が発生します。while デシリアライゼーションの一部のプロパティを使用したい場合、その存在は保証されません。A
B
A
基本的に、この問題は、オブジェクト自体は不完全な状態にありますが、他のオブジェクトの完全な状態を必要とするために発生します。これは意味がありません。復元プロセスを複数のフェーズに分割することも考えましたが、実際にはすべてのフェーズが終了するまでオブジェクトは不完全な状態のままになるため、実際には違いはありません。
この問題に対するアドバイスや良い解決策を教えてもらえますか?
PS。これをコーディングして、Cocoa のNSKeyedArchiver
. したがって、オブジェクトのエンコードはオブジェクト自体によって行われると想定しました。(内部状態について)したがって、一般的なグラフの問題では異なる可能性があります。しかし、オブジェクト自体が取得できる隠し状態を除外することはできません...