2015
7,7
一天一工程总结系列
对各类优秀工程的剖析和拙见。有些胡言乱语还请作者谅解。
KVOController
1结构
1.1.@interface NSObject (FBKVOController)--可以用这种方式
1.2.FBKVOController--可以用这种方式
包括以下类
@interface _FBKVOInfo : NSObject
@interface _FBKVOSharedController : NSObject--单例
@interface FBKVOController : NSObject----三个变量:observer,_objectInfosMap,_lock
2.添加观察者的步骤,
1.创建FBKVOInfo对象,
2.添加到_objectInfosmap,
3.[object addObserver:self forKeyPath:info->_keyPath options:info->_options context:(void *)info];
3.
4.其他
4.1instancetype
KVO的另类解析
被观察者:A
观察者:B
[A addObserver:B forKeyPath:A's成员变量'skeypath options:flag context:NULL];
B需要实现代理:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
1.keyPath ?=A's成员变量'skeypath
YES doSomething
NO 忽略
触发点:[A setValue: forKeyPath:];
对被观察者的变量赋值,观察者拿到这个事件,+环境参数,做出观察者的响应。