1.什么是KVO?什么是KVC
-
KVO: Key-Value Observing,俗称“键-值 监听”,可用于监听对象的某一属性改变
KVO的简单使用.png
- KVC:Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性
2.KVO的本质是什么?
- 利用runtime消息发送机制动态创建NSNotify_XX子类,子类拥有自己的set方法实现
- 在子类setter方法中实质是调用NSKeyValueObserving,
set方法实现内部会顺序调用willChangeValueForKey方法、原来的setter方法实现、didChangeValueForKey方法,而didChangeValueForKey方法内部又会调用监听器的observeValueForKeyPath:ofObject:change:context:监听方法 - 在observeDidChange方法中----observeValueForKeyPath:ofObject:change:context:监听方法
3.如何手动触发KVO
- 先要手动调用willChangeValueForKey
- 再调用DidChangeValueForKey
4.直接修改成员变量会触发KVO吗?
- 不会
5.通过KVC修改属性会触发KVO吗? - 不会
6.KVC的赋值和取值过程?查找顺序?实现原理?
事实证明再也找不到比MJ 总结的更详细的KVC了!!!

网友评论