gpt4 book ai didi

objective-c - objc 中的简单 setter 仍然生成更改值通知

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:15 27 4
gpt4 key购买 nike

我有简单的二传手

- (void) setValue: (int) newVal
{
value = newVal;
}

其中 valueint value; 实例变量。

使用 [myobj setValue: 10]; 怎么可能仍然为观察者生成通知,即使我的 setter 没有明确地做任何通知(即它不调用 willChangeValueForKeydidChangeValueForKey)。

不确定它是否相关,但我使用的是普通的旧 Mac OS X。这在 iOS 上有什么不同吗?

最佳答案

Cocoa(和 CocoaTouch)使用一种称为“isa-swizzling”的技术来实现自动 KVO 支持。

它的工作原理是动态子类化被观察对象的类,覆盖被观察属性的 setter 。覆盖方法的实现会发送 willChangeValueForKey:didChangeValueForKey: 消息(当然还会调用中间的原始实现)。

当一个对象的观察被设置时,对象的原始 isa 指针(指向对象的类)被新的动态创建的子类所取代。由于子类不会增加对象的大小,因此在不损害内存布局的情况下这是可能的。

关于objective-c - objc 中的简单 setter 仍然生成更改值通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com