kvc和kvo的本质与底层调用
KVO
- 项目中使用的KVO
- 监听键盘的弹起收回
- 给webView添加加载进图条
- 添加了kvo的对象:
- 其isa指针,不再指向原来的class,而指向NSKVONotifying_class,其class的isa也指向自己的meta-class
- 方法实现也不再指向类对象的方法,而对应foundation'_NSSetIntValueAndNotify'函数
补充:代理效率比kvo高。代理不会生成额外的信息。
KVC
- 通过KVC修改属性,内部会触发KVO监听
- setValue:forKey:原理
- 按照setKey: --->_setKey:顺序查找方法
- 没有找到方法,查看accessinstanceVariablesDirectly方法的返回值,返回YES,才可以访问成员变量,NO,抛出异常undefinedKey。
- 查找成员变量按照 _key、_isKey、key、isKey 的顺序查找。找不到,抛出异常undefinedKey。
- setValue:forKey:原理
网友评论