私はNSDictionaryを持っています。これは、子 NSDictionary の配列を含むいくつかのオブジェクトを保持します。各オブジェクトは@"Parent"
、親 NSDictionary を指すようにキー付けされたオブジェクトを持ちます。
この循環参照は、次のような従来の呼び出しでオブジェクトを検査する機能を壊します。
NSLog(@"%@", [myDictionary description]);
オブジェクトを検査するための回避策を推奨してくれる人はいますか?
私はNSDictionaryを持っています。これは、子 NSDictionary の配列を含むいくつかのオブジェクトを保持します。各オブジェクトは@"Parent"
、親 NSDictionary を指すようにキー付けされたオブジェクトを持ちます。
この循環参照は、次のような従来の呼び出しでオブジェクトを検査する機能を壊します。
NSLog(@"%@", [myDictionary description]);
オブジェクトを検査するための回避策を推奨してくれる人はいますか?
NSDictionary
辞書の記述方法に頼るのではなく、カテゴリに独自の記述方法を作成し、その内容を手動で印刷できませんか?
ここでは、辞書がコンテンツを保持するという点で、より大きな問題が発生する可能性があります。オブジェクトをディクショナリに追加する場合は保持され、それを含むディクショナリを「サブ」ディクショナリに追加する場合はその親が保持されます。これにより、おそらく保持サイクルが発生し、オブジェクトの割り当てが解除されなくなります。
Aaron Hillegass 著「Mac OS X の Cocoa プログラミング」より:
オブジェクト X がオブジェクト Y を保持し、Y が X を保持する場合、オブジェクトの割り当てが解除されることはありません。この状況は保持サイクルと呼ばれます。リテイン サイクルにより、アプリケーションのメモリ空間に大量のガベージ アイランドが蓄積される可能性があります。