objective-c – 你需要调用willChangeValueForKey吗?和didChang
发布时间:2020-12-16 03:13:03 所属栏目:百科 来源:网络整理
导读:我以为自制的@property设备应该是这样的: -(void) setFoo:(Foo *)newFoo { // Safeguards // ... [self willChangeValueForKey:@"foo"]; // Switcheroo // ... [self didChangeValueForKey:@"foo"];} 但是我在博客中看到很多代码,他们在做Cocoa的时间比我长
我以为自制的@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通知. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |