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

前端之家收集整理的这篇文章主要介绍了objective-c – 你需要调用willChangeValueForKey吗?和didChangeValueForKey:?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以为自制的@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通知.

猜你在找的C&C++相关文章