OC语法|OC语法 KVO
- Key-Value-Observe
键指针监听
Key-Value-Coding
键值编码)实现的.- 实现原理
在为实例对象添加观察者后,系统内部会新建一个名为NSKVONotifying_类名
的类继承原实例对象的父类,并将原实例对象的isa指针
指向NSKVONotifying_类名
类,并为NSKVONotifying_类名
添加以下方法
1.set[属性名]:
方法, 在原实例对象调用set[属性名]:
方法时,会通过isa
指针,寻找到NSKVONotifying_类名
的set[属性名]:
方法并调用。
2.class:
方法 在实例对象调用时返回原实例对象的类名,欺骗。
3.delloc:
方法 在移除监听做处理。
4._isKVOA:
方法 判断是不是KVO。的类
set[属性名]:
方法
set[属性名]:
方法时,会通过isa
指针,寻找到NSKVONotifying_类名
的set[属性名]:
方法并调用。NSKVONotifying_类名
的set[属性名]:
方法内部会调用_NSSet[值得类型]ValueAndNotify
方法,文章图片
_NSSet[值得类型]ValueAndNotify`方法 值
_NSSet[值得类型]ValueAndNotify
方法 的内部实现[self willChangeValueForKey:@""];
//原来的setter的实现
[self didChangeValueForKey:@""];
在
didChangeValueForKey:
内部会调用obeseverValueForKeyPath:ofObject:change:context:
方法 通知外部调用完成【OC语法|OC语法 KVO】可以得知,KVO依赖于
set[属性名]:
方法 ,set[属性名]:
方法 又依赖于 KVC推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 六步搭建ES6语法环境
- SpringBoot中YAML语法及几个注意点说明
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- MySQL|MySQL 存储过程语法及实例
- WebSocket|WebSocket 语法解析
- 灵感迸发
- Objective-c
- 深入浅出JavaScript8章节第01章语法
- 初中英语语法第一课(语法到底是个什么玩意儿())