将KVO观察者添加到self会导致内存泄漏吗?

10
在一个 NSObject 中,你有一个名为 "keyPath" 的属性,你想要观察它本身并使用:
[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:nil];

上面的代码是否会导致保留循环?

我提出这个问题是因为我想知道它是否是重写一堆 setter 函数的可行替代方案。

1个回答

11

来自文档:

接收者和观察者都不会被保留。


讨论 该部分被遗漏了。 “讨论 接收器和观察者都没有被保留。” - Yogurt
1
我吸取了教训。我犯了一个错误,只阅读了弹出文本,当我单击函数调用并按住 option/alt 时,如果我去 AppleDocs html 上查看操作,我会看到讨论文本,它会说明这一点。对于造成的麻烦,我感到抱歉。 - Yogurt
由于苹果并不认真对待永久链接,因此信息仍然存在,但已经移至此处:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOBasics.html#//apple_ref/doc/uid/20002252-BAJEAIEE 注意:key-value observing addObserver:forKeyPath:options:context: 方法不会对观察对象、被观察对象或上下文维持强引用。您应确保必要时维护对观察和被观察对象以及上下文的强引用。 - nteissler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接