racobserve
分为2层
1,信号化部分
target(被观察对象) rac_valuesForKeyPath: keyPath(对应为被观察对象的keypath) options: observer:
rac万物皆是流。此层是公开的。
2,kvoWrapper
kvo从observer-NSKeyValueObserving扩展 的方式 改为 observer-block的方式。
这一层, 又拆分成 kvoWrapper, kvoTrampoline, kvoProxy 3个部分。 它是私有的,不对外暴露。
系统的方法 obj addobserver: keypath: options: context:
支持keypath多层路径的观察。 被观察对象 和keypath路径中的对象,都是被观察的。
为了和系统一致, kvoWrapper的rac_observeKeyPath方法是递归的。
分别对、 target对象, keypath路径的对象, 做观察。
trampoline保存block,observer,target
kvoProxy单例中的 NSMapTable strongToWeakObjectsMapTable 保存trampoline
kvoProxy实现observer-NSKeyValueObserving扩展
网友评论