objective-c – 你需要调用willChangeValueForKey吗?和didChangeValueForKey:?

objective-c – 你需要调用willChangeValueForKey吗?和didChangeValueForKey:?,第1张

概述我以为自制的@property设备应该是这样的: -(void) setFoo:(Foo *)newFoo { // Safeguards // ... [self willChangeValueForKey:@"foo"]; // Switcheroo // ... [self didChangeValueForKey:@"foo"];} 但是我在博客中看到很多代 我以为自制的@property设备应该是这样的:
-(voID) setFoo:(Foo *)newFoo {  // Safeguards   // ...  [self willChangeValueForKey:@"foo"];  // Switcheroo  // ...  [self dIDChangeValueForKey:@"foo"];}

但是我在博客中看到很多代码,他们在做Cocoa的时间比我长得多,在这里是这样的:

-(voID) setFoo(Foo *)newFoo {  // Safeguards   // ...  // Switcheroo  // ...}

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

解决方法 除非你选择退出,否则它是神奇的.阅读KVO指南的 this section.请注意,KVC / KVO从远古时代(即在引入@property之前)存在,所以设置者是否被合成是无关紧要的.它甚至与旧的/新的运行时二分法无关.

这个魔术(isa-swizzling)的细节在Mike Ash的blog post中详细描述.这是魔法.基本上,当观察到键时,运行时将自动替换设置器的实现,以便调用KVO通知.

总结

以上是内存溢出为你收集整理的objective-c – 你需要调用willChangeValueForKey吗?和didChangeValueForKey:?全部内容,希望文章能够帮你解决objective-c – 你需要调用willChangeValueForKey吗?和didChangeValueForKey:?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1253870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存