KVC
1.KVC: Key - value - coder 键值编码的简称
KVC对成员变量进行动态赋值
(1)先去类中查找是否具有该变量的setter方法的声明和实现部分 如果具有直接调用setter方法对成员变量进行赋值
(2)如果不具有 继续查找是否具有以该变量命名的成员变量 如果具有直接赋值
(3)如果不具有 继续查找是否有以下划线开头以变量名命名的成员变量 如果有就赋值 如果不具有崩溃
//KVC对成员变量使用setValue: forKey(path) :进行赋值
[custom setValue:@"xuli" forKey:@"name"];
[custom setValue:@(19) forKey:@"age"];
//KVC 对成员变量进行获取使用的方法的是valueForkey(path):
NSLog(@"%@,%d",[custom valueForKey:@"name"],[[custom valueForKey:@"age"] intValue]);
2.kvo :key - value- observer缩写 键值观察者的简称
主要用于观察 (成员变量)变化前和变化后的值
使用范围:当APP第一次打开的时候 会从服务器获取所有数据存放在本地的内存中 当第二次启动APP的时候 APP的本地数据会和服务器上的数据进行比较 如果相同直接从本地读取 如果不同需要从服务器上重新下载并存储到本地 这个过程使用的就是KVO进行比较
功能:能够提高APP的编译时间 节省用户的流量
(1)添加观察者的对象指针 一般就是self
(2)被观察的成员变量名称
(3)获取的就是成员变量变化前和变化后的两个值 NSKeyValueObservingOptionNew NSKeyValueObservingOptionOld
(4)一般时候默认设置为nil
[boy addObserver:self forKeyPath:@"boyName" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
[girl addObserver:self forKeyPath:@"girlName" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
/*
1.被观察成员变量的名称
2.成员变量的指针
3.成员变量变化前后的值
*/
UILabel * label1 = (UILabel *)[self.view viewWithTag:1];
UILabel * label2 = (UILabel *)[self.view viewWithTag:2];
if ([object isMemberOfClass:[boy class]]){
label1.text = [NSString stringWithFormat:@"%@ %@",change[@"old"],change[@"new"]];
}else{
label2.text = [NSString stringWithFormat:@"%@ %@",change[@"old"],change[@"new"]];
}
}
网友评论