0

私は、KVOが観測されているすべての値を保持している理由を理解しようとすると、本当に苦痛を感じています。なぜKVOはNSMutableArrayのすべてのオブジェクトを保持していますか?

シナリオ:私は弱い参照を持つNSMutableArrayを持っています。 (保持と解放の両方にNULLを持つCFArrayCreateMutableとCallbackで設定します)。追加されたオブジェクトは決して保持/解放されません。

NSMutableArrayの値を監視するNSArrayControllerがあります。

しかし、今度はNSMutableArrayのすべてのオブジェクトも保持されます。なぜこれが起こっているのですか?これをどうやって止めるのですか?

答えて

1

何かがこれらのオブジェクトを保持していることをどのように知っていますか?あなたは〜を見ていない〜カウント。そう?もしそうなら、それをしないでください。

the way KVO worksを読むと、オブジェクトの観察を開始するときに舞台裏でいくつかのオブジェクトが作成されることがわかります。あなたは実際にKVOをうまく使うためにこれらのオブジェクトを知ったり考えたりする必要はありません。実際には、が知っていることはあまりありませんが、自分自身以外の人を心配するべきではありません物事を保持する。

+0

@David、右、私はあなたの質問[配列からオブジェクトを自動的に追加/削除することについてのあなたの質問](http://stackoverflow.com/q/5972808/643383)を覚えています。あなたは '-retainCount'を見ていないかもしれませんが、特定の時刻に呼び出されている' -dealloc'を数え続けていて、他のオブジェクトの動作について仮定しています。 「KVOを補う」のようなことをしようとするたびに、あなたは間違っていて、間違っています。 ;-)また、オブジェクトが可変配列にある場合、配列自身がオブジェクトを保持するため、 '-dealloc'は決して呼び出されません。あなたはそれを知っていると確信しています。 – Caleb

+0

@David、技術的には、リークは異なります。誰も参照していないため、決して割り当てを解除できないメモリのチャンクです。あなたが持っているものは、実際にはサイクルではなく、あなたの方法で得る予期しない保持であることを除いて、保持サイクルに似ています。私はあなたがしようとしているものの巧みさに感謝していると思うが、それと同時に、あなたが問題を引き起こしている他のオブジェクトについて作っているという仮定だ。あなたがDDAutozeroingArrayを使用していると仮定すると、短い答えはおそらくKVOをサポートしていないということでしょう。 – Caleb

関連する問題