1、RAC::把一个对象的某个属性绑定一个信号,只要发出信号,就会把信号的内容给对象的属性赋值
// 例如:给label的text属性绑定了文本框改变的信号
RAC(self.label, text) =self.textField.rac_textSignal;
// [self.textField.rac_textSignal subscribeNext:^(id x) {
// self.label.text = x;
// }];
2、RACObserve:快速的监听某个对象的某个属性改变
/**
* KVO
* RACObserve:快速的监听某个对象的某个属性改变
* 返回的是一个信号,对象的某个属性改变的信号
*/
[RACObserve(self.view, center) subscribeNext:^(idx) {
NSLog(@"%@", x);
}];
3、@weakify(self):解决循环引用问题
/**
* 循环引用问题
*/
@weakify(self)
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
@strongify(self)
NSLog(@"%@",self.view);
returnnil;
}];
_signal = signal;
使用 @weakify(self)和@strongify(self)来避免循环引用
解释:通过编译看下图,对比OC 传统的__weak 和@weakify(self) 其实是一样,好处是不需要像OC对待循环引用 一个个替换成 weakSelf,
4、RACTuple:元组
/**
* 元祖
* 快速包装一个元组
* 把包装的类型放在宏的参数里面,就会自动包装
*/
RACTuple *tuple = RACTuplePack(@1,@2,@4);
// 宏的参数类型要和元祖中元素类型一致, 右边为要解析的元祖。
RACTupleUnpack_(NSNumber*num1,NSNumber*num2,NSNumber* num3) = tuple;// 4.元祖
// 快速包装一个元组
// 把包装的类型放在宏的参数里面,就会自动包装
NSLog(@"%@ %@ %@", num1, num2, num3);
RACTupleUnpack 宏,用来解析元组。
他需要的参数就是 键、值,右边的x就是你需要进行处理的元组了:如下
NSDictionary*dict =@{@"user":@"admin",@"age":@"20",@"gender":@"man"};
RACSequence *sequence = dict.rac_sequence;RACSignal *signal = sequence.signal;
[signal subscribeNext:^(idx) {
//进行对数据的处理,如下}];
//可以将上述代码转换如下
[dict.rac_sequence.signal subscribeNext:^(idx) { RACTupleUnpack(NSString*key,NSString*value) = x;
NSLog(@"%@-%@",key,value);
}];