0

我有一個真正的痛苦,試圖找出爲什麼KVO保留所有正在觀察的值。爲什麼KVO保留所有NSMutableArray的對象?

場景:我有一個弱引用的NSMutableArray。 (使用CFArrayCreateMutable和Callback對於retain和release都設置爲NULL)。意味着添加的任何對象都不會被保留/釋放。

我有一個NSArrayController觀察NSMutableArray的值。

但是現在,NSMutableArray的每個對象都被保留下來了。爲什麼會發生這種情況,我該如何解決這個問題?

回答

1

你怎麼知道某物保留了這些物體?你沒有看着-retainCount,是嗎?如果是的話,不要這樣做。

如果您閱讀了關於the way KVO works的內容,您會發現在開始觀察對象時會在幕後創建一些對象。爲了成功使用KVO,你實際上不需要了解或考慮這些對象 - 實際上,你知道的並不多 - 但你也不應該擔心除你自己之外的其他人可能或不可以保留的東西。

+0

@大衛,對,我記得[你的問題關於自動添加/從數組中刪除對象](http://stackoverflow.com/q/5972808/643383)。你可能沒有看看'-retainCount',但你仍然指望在特定的時間調用'-dealloc',並且你正在假設其他對象的行爲。任何時候,當你嘗試做「補償KVO」時,你就錯了,並且犯了更多的錯誤。 ;-)另外,請注意,如果一個對象位於可變數組中,則不應調用「-dealloc」,因爲數組本身將保留該對象。我相信你知道這一點。 – Caleb

+0

@David,從技術上說,泄漏是不同的:這是一塊永遠無法釋放的內存塊,因爲沒有人提及它。你得到的更像是一個保留週期,除了它不是一個真正的循環,只是一個意想不到的保留,它正在阻礙你。我想我很欣賞你想要做的事情的聰明,但同時也是你對導致問題的其他物體的假設。假設你使用DDAutozeroingArray,簡短的答案可能是它不支持KVO。 – Caleb

相關問題