首页 > 解决方案 > 我现在必须手动删除 KVO 中的观察者吗?

问题描述

我很困惑,我现在必须手动删除 KVO 中的观察者吗?当我在网站上搜索这个问题时,我发现Do I have to removeObserver in KVO手动这个问题。所以我尝试添加 NSKVODeallocateBreak 符号异常。但是当我将观察者设置为nil没有手动删除观察者时,什么都没有发生。然后我尝试查看调试内存图NSKeyValueObservationInfo

此屏幕截图是在添加观察者后捕获的,我尝试更新观察到的属性值以进行测试。

添加观察者和测试

然后我移除观察者。它显示内存中的某些东西消失了。

移除观察者

然后我将观察者设置为零。好像什么都没发生。

将观察者设置为零

之后,我再次初始化观察者,并再次添加观察者。它表明记忆中的某些东西再次出现了。

再次初始化观察者,再次添加观察者

最后,我只是将观察者设置为 nil(没有 removeObserver)。它似乎与 removeObserver 的结果相同。

只需将观察者设置为零

那么,KVO 有什么变化吗?还是我的测试不正确?

我的代码粘贴在这里:https ://gist.github.com/kingcos/36575befa94a464d7aff689daa34f5d6

标签: objective-ckey-value-observing

解决方案


推荐阅读