Objective c 为什么KVO保留所有NSMutableArray';什么东西?
我真的很难弄明白为什么KVO保留了所有被观察到的值 场景:我有一个带有弱引用的NSMutableArray。(使用CFArrayCreateMutable和Callback设置,retain和release都为NULL)。意味着任何添加的对象都不会被保留/释放 我有一个NSArrayController观察NSMutableArray的值Objective c 为什么KVO保留所有NSMutableArray';什么东西?,objective-c,xcode,key-value-observing,key-value-coding,retaincount,Objective C,Xcode,Key Value Observing,Key Value Coding,Retaincount,我真的很难弄明白为什么KVO保留了所有被观察到的值 场景:我有一个带有弱引用的NSMutableArray。(使用CFArrayCreateMutable和Callback设置,retain和release都为NULL)。意味着任何添加的对象都不会被保留/释放 我有一个NSArrayController观察NSMutableArray的值 但是现在,NSMutableArray的每个对象都被保留了下来。为什么会发生这种情况?我该如何阻止这种情况?您如何知道有东西在保留这些对象?你不是在看-重新计
但是现在,NSMutableArray的每个对象都被保留了下来。为什么会发生这种情况?我该如何阻止这种情况?您如何知道有东西在保留这些对象?你不是在看-重新计数,是吗?如果是,不要这样做
如果你读过,你会发现当你开始观察物体时,在幕后创建了一些物体。要成功地使用KVO,您真的不需要知道或思考这些对象——事实上,您知道的并不多——但您也不应该担心除了您自己以外的其他人可能会或可能不会保留这些东西。@David,是的,我记得。您可能没有看到
-retainCount
,但仍然指望在特定时间调用-dealloc
,并对其他对象的行为进行假设。任何时候,当你试图做类似“补偿KVO”的事情时,你都是错的,而且会犯更多的错误另外,请注意,如果对象位于可变数组中,则永远不应调用它的-dealoc
,因为数组本身将保留该对象。大卫,从技术上讲,泄漏是不同的:它是一块永远无法释放的内存,因为没有人引用它。你所得到的更像是一个保留周期,除了它不是一个真正的周期,只是一个意外的保留在你的路上。我想我很欣赏你所做的聪明,但同时也是你对其他物体的假设造成了问题。假设您使用的是DDAutozeroingArray,简短的回答可能是它不支持KVO。