我以为自制的@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通知.