// 0、NSObject+RACPropertySubscribing.h
#define RACObserve(TARGET, KEYPATH) _RACObserve(TARGET, KEYPATH)
#define _RACObserve(TARGET, KEYPATH) \
({ \
__weak id target_ = (TARGET); \
[target_ rac_valuesForKeyPath:@keypath(TARGET, KEYPATH) observer:self]; \
})
// 1、NSObject+RACPropertySubscribing.h 信号的方式///map映射了--值
[self rac_valuesForKeyPath:[<#(nonnull NSString *)#>] observer:<#(NSObject * _Nonnull __weak)#>]
// 2、 NSObject+RACPropertySubscribing.h 信号的方式///值、字典
[self rac_valuesAndChangesForKeyPath:<#(nonnull NSString *)#> options:<#(NSKeyValueObservingOptions)#> observer:<#(NSObject * _Nonnull __weak)#>]
// 3、NSObject+RACKVOWrapper.h block的方式//处理递归调用-----keypath由多级路径组成
[self rac_observeKeyPath:<#(NSString *)#> options:<#(NSKeyValueObservingOptions)#> observer:<#(NSObject *__weak)#> block:<#^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent)block#>]
// 4、RACKVOTrampoline.h block的方式
- (instancetype)initWithTarget:(__weak NSObject *)target observer:(__weak NSObject *)observer keyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options block:(RACKVOBlock)block
RACObserve 与系统的不冲突;
rac_signalForSelector有冲突RACObserve;
rac_signalForSelector先调用、RACObserve后调用;
如果是相反,则发生crash;rac_alias_setKvoValue:]: unrecognized selector sent to instance 0x7ff1e3e12570'
rac_signalForSelector
RACObserve
addObserver: forKeyPath: options
// 22 TextViewBindViewController_RACSelectorSignal ///NSKVONotifying_TextViewBindViewController
// [[self rac_signalForSelector:@selector(intValue1:float2:char:)] subscribeNext:^(RACTuple * _Nullable x) {
// NSLog(@"111-> %@" , x);
// } error:^(NSError * _Nullable error) {
// NSLog(@"222->: %@" ,error );
// } completed:^{
// NSLog(@"completed!!");
// }];
[[self rac_signalForSelector:@selector(setKvoValue:)] subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"%s %@ --%d",__func__, x, __LINE__);
}];
NSString*s4=[NSString stringWithUTF8String: object_getClassName(self) ];
// 11 NSKVONotifying_TextViewBindViewController_RACSelectorSignal // NSKVONotifying_TextViewBindViewController
[RACObserve(self, kvoValue) subscribeNext:^(id _Nullable x) {
NSLog(@"%s %@ --%d",__func__, x, __LINE__);
}error:^(NSError * _Nullable error) {
NSLog(@"%s --%d",__func__, __LINE__);
}completed:^{
NSLog(@"%s --%d",__func__, __LINE__);
}];
NSString*s3=[NSString stringWithUTF8String: object_getClassName(self) ];
// 33 NSKVONotifying_TextViewBindViewController_RACSelectorSignal///NSKVONotifying_TextViewBindViewController
[self addObserver:self forKeyPath:@"kvoValue" options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew context:nil];
NSString*s5=[NSString stringWithUTF8String: object_getClassName(self) ];
NSLog(@"%s %@,%@,%@ --%d",__func__, s3,s4,s5, __LINE__);
[self intValue1:1 float2:1.2 char:@"1".UTF8String];
[self setKvoValue:@"111"];
[self setValue:@"222" forKey:@"kvoValue"];
_kvoValue=@"333";