前言
作为IOS初学者,分析的深度非常有限,所以本文更像是学习笔记,欢迎批评指正。
原理
RACObserve是个宏,RACObserve(TARGET, KEYPATH)
最终是执行[target_ rac_valuesForKeyPath:@keypath(TARGET, KEYPATH) observer:self];
。这就牵出NSObject (RACPropertySubscribing)
Category。
NSObject (RACPropertySubscribing)
- (RACSignal *)rac_valuesForKeyPath:(NSString *)keyPath observer:(__weak NSObject *)observer;
内部调用了- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)observer
。其中options参数为NSKeyValueObservingOptionInitial
。所以RACObserve创建的Signal 会立即发送被观察者的初始值。
- (RACSignal *)rac_valuesAndChangesForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options observer:(__weak NSObject *)observer
中可以看出。如果target为nil,返回一个空的