gpt4 book ai didi

objective-c - 你需要调用 willChangeValueForKey : and didChangeValueForKey:?

转载 作者:太空狗 更新时间:2023-10-30 03:28:41 25 4
gpt4 key购买 nike

我认为自制的@property setter 应该是这样的:

-(void) setFoo:(Foo *)newFoo {

// Safeguards
// ...

[self willChangeValueForKey:@"foo"];
// Switcheroo
// ...
[self didChangeValueForKey:@"foo"];
}

但是我在博客文章中看到很多代码,这些代码都是使用 Cocoa 的时间比我长得多的人写的,它们是这样的:

-(void) setFoo(Foo *)newFoo {

// Safeguards
// ...

// Switcheroo
// ...
}

所以我的问题是,我们需要调用 KVO 通知方法吗?或者,如果您使用的是现代运行时,它是否在您更新私有(private) iVar 时神奇地完成了?

最佳答案

除非您选择退出,否则它会神奇地完成。阅读 this section KVO 指南。请注意,KVC/KVO 从远古时代就存在(即在 @property 引入之前),因此 setter 是否为 @synthesized 并不重要。它甚至与旧/新运行时二分法无关。

这个魔法(isa-swizzling)的细节在 blog post 中有详细说明。迈克·阿什。这是魔法。基本上,当观察到一个键时,运行时会自动替换 s​​etter 的实现,以便它调用 KVO 通知。

关于objective-c - 你需要调用 willChangeValueForKey : and didChangeValueForKey:?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261139/

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