- 通过KVC 修改属性会出发KVO 吗 ?
会的 , 不管对象有没有实现set方法都可以
{ kvc 内部类似这种实现 [self will change value]; [self.person-age = 10]; [did change value]; }
- KVC 的赋值过程是怎样的? 原理是什么 ?
======
KVC Key-value Coding 键值编码 通过key 来访问某个属性
常见的API 有 //设置属性值
- (void)setValue Forkeypath
- (void)setValue forKey //获取属性值
- (void)valueForKeyPath
- (void)valueForKey
peron.age = 10;
kvc
[person setValue:@10 forKey:@"age"];
[person setValue:@10 forKeyPath:@"cat.weight"];
int a = [person valueForKey:@"age"];
setvalue
按顺序寻找 setKey _setKey 方法 如果找到 就传递参数调用方法
如果没有 就会查找 // 能否直接访问成员变量
-
(Bool)accessInstanceVariablesDirectly {
return YES; 默认返回yes
按这个顺序 查找 _key _isKey key iskey 如果有 就设置 没有就保存
return NO; 奔溃 找不到key }
valueForKey : 的原理
先按 get 方法查抄 get方法的顺序 getKey key isKey _key
找到任意一个即可调用
如果都不存在
// 能否直接访问成员变量
-
(Bool)accessInstanceVariablesDirectly {
return YES; 默认返回yes
按这个顺序 查找 _key _isKey key iskey 如果有 就设置 没有就保存
return NO; 奔溃 找不到key }