关于KVO/KVC的作用主要为监听类中属性的值的变化。
至于如何使用,在此不多做介绍,网上很多教程。在此主要说说需要注意的地方。
比如我们添加对一个属性的监听:
//开启kvo/kvc模式,当userinfo中(todaySinging)签到属性发生变化时及时更改标签显示
[[UserInfo sharedUserInfo] addObserver:self forKeyPath:@"todaySigning" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
当[UserInfo sharedUserInfo]中的属性todaySigning的值发生变化时,会触发:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
[self showOrHideViewWithIssued]; //当更改了当前是否签到的值时,重新设置按钮和标签的显示
}
我们现在来改变属性值:
[UserInfo sharedUserInfo].todaySinging = @"1"; //1
[[UserInfo sharedUserInfo] setValue:@"1" forKey:@"todaySigning"]; //2
[[UserInfo sharedUserInfo] setValue:@"1" forKey:@"TodaySigning"]; //3
以上3句代码都能完成更改属性值,但值得一提的是,1和2在改变属性值的同时会触发KVO/KVC,而3由于key的首字母是大写,与属性名的首字母不匹配,所以不会触发KVO/KVC