KVC和KVO的理解

  • 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;注册监听没有被移除,又重新注册了监听会崩溃
posted @ 2016-07-14 16:12  hanfengs  阅读(155)  评论(0编辑  收藏  举报