默认情况下,我们只需要按照正常属性的键值观察,就是说属性值变化完全是由系统控制,我们只需要告诉系统监听什么属性,然后就直接等系统告诉我们就完事了。而实际上,KVO 还支持「手动挡」。
要让系统知道我们想开启手动挡,需要修改类方法 automaticallyNotifiesObserversForKey: 的返回值,这个方法如果返回 YES 就是自动挡,返回 NO 就是手动挡。同时该类方法还能精准实策,让我们选择对哪些属性是自动,哪些属性是手动。
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)theKey {
BOOL automatic = NO;
if ([theKey isEqualToString:@"balance"]) {
automatic = NO;
}
else {
automatic = [super automaticallyNotifiesObserversForKey:theKey];
}
return automatic;
}