- KVC理解?
- 1;KVC是键值编码,是一种间接访问对象属性的机制
- 2;使用方法
- 1;操作基本数据类型,装箱拆箱
- 2;对对象属性以及属性依然是对象的多层属性,setValue:forKeyPath;valueForKeyPath
- 3;存放对象的数组使用
- 4;对字典的使用,字典转模型,setValueForKeysWithDictionary,setValue:forUndefinekey;模型转字典,dictionaryWithValuesForKeys
- 3;KVC的底层实现
- 1;首先调用属性的getter和setter方法
- 2;如果没有,就找带下划线的属性
- 3;还没有,就按属性名查找
- 4;最终没有找到会报错
- 4;KVC注意的地方
- 1;value不能为空
- 2;可以为只读,私有属性赋值,会有不安全问题
- KVO的理解?
- 1;监听观察对象的某个属性发生更改时,观察者会获得通知
- 2;使用方法
- 1;注册观察者,self.person addObserver: forKeyPath:
- 2;KVO的回调方法,observerValueForKeyPath:
- 3;移除观察者,dealloc removeObserver
- 3;KVO的底层实现
- 1;利用runtime,在运行时会创建一个派生子类,继承自被观察的类
- 2;更改isa指针为这个新的子类
- 3;根据keyPath,为被观察的某个属性重写setter方法
- 4;调用方法,把改变的属性值传递出去
- 4;注意的地方
- 1;被观察的对象销毁或者变为局部变量KVO会崩溃
- 2;观察者被释放掉,但没有移除监听会崩溃
- 3;注册监听没有被移除,又重新注册了监听会崩溃