一、概要
- RAC :給某個(gè)對象綁定一個(gè)屬性
- RACObserve :監(jiān)聽某個(gè)對象的某個(gè)屬性
- RACTuplePack :將數(shù)據(jù)打包成RACTuple
- RACTupleUnpack : 將ARC元祖解包成對象的數(shù)據(jù)
二、具體實(shí)現(xiàn)
1、宏-RAC
-(void)demo_RAC {
//方法一:
//監(jiān)聽文本框
// * 文本信號 *
// [_textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
// NSLog(@"EEEEE == %@",x);
// }];
//方法二: 宏
//給某個(gè)對象的某個(gè)屬性綁定信號,一旦信號產(chǎn)生數(shù)據(jù),就會將內(nèi)容賦值給屬性??!
RAC(_showLabel,text) = _textField.rac_textSignal;
}
2、RACObserve
可代替KVO
-(void)demo_RACObserve {
//只要這個(gè)對象的屬性發(fā)生改變,我就發(fā)送信號?。?!
//在這里就是 只要label的text文本發(fā)生變化,我就發(fā)送文本信號
[RACObserve(self.showLabel, text) subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
//配合上面的操作
//給某個(gè)對象的某個(gè)屬性綁定信號,一旦信號產(chǎn)生數(shù)據(jù),就會將內(nèi)容賦值給屬性??!
RAC(_showLabel,text) = _textField.rac_textSignal;
}
3、weakify、strongify
案例:Block循環(huán)引用
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
NSLog(@"%@",self);
return nil;
}];
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
//添加強(qiáng)引用
_mysignal = signal;
解決方案:weakify、strongify 兩個(gè)必須連著一起用
@weakify(self);
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
@strongify(self);
NSLog(@"%@",self);
return nil;
}];
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
//添加強(qiáng)引用
_mysignal = signal;
檢測是否循環(huán)引用
-(void)dealloc {
NSLog(@"哥們走了");
}
4、RACTuplePack、RACTupleUnpack
-(void)demo_RACPack {
//包裝元祖
RACTuple *tuple = RACTuplePack(@"abc", @"efg");
//解包元祖
RACTupleUnpack(NSString *string1,NSString *string2) = tuple;
NSLog(@"%@---%@",string1,string2);
}