@代理
简介:使用RACSubject信号替换
控制器2的操作:
<1在头文件定义一个信号:
@property (nonatomic, strong) RACSubject *delegateSignal;
<2在响应操作内发送信号:
if (self.delegateSignal) {
// 有值,才需要通知
1[self.delegateSignal sendNext:self.clock];
// 注意,加上这一句,有时才不会被多次调用
2[self.delegateSignal sendCompleted];
}
控制器1的操作
<1设置信号 (而并不是成为VC1的代理)
editVC.delegateSignal = [RACSubject subject];
<2订阅信号
[editVC.delegateSignal subscribeNext:^(id x) {
//remove
DJTimeClock *clock = (DJTimeClock *)x;
DJLog(@"come");
}];
@通知
@KVO
简介:主要是增强了系统的NSNotificationCenter对象。
1通知方的发布操作
NSMutableArray *dataArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];[[NSNotificationCenter defaultCenter] postNotificationName:@"postData" object:dataArray];
2接收方的订阅操作
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"postData" object:nil] subscribeNext:^(NSNotification *notification) { NSLog(@"%@", notification.name); NSLog(@"%@", notification.object);}];
注意点
1接收方的订阅操作方法,要在viewDidLoad方法调用
我的理解
1通过block把按钮的addtarget的监听,处理,两个步骤二合一了,
好处是若在本控制器内添加监听,更方便
在自定义类监听就不一定了,因为经常监听到了,不一定就是自己处理,一般另外通知控制器,此时仍然用自己的block更好
尤其自定义类,监听多个子控件时,用rac需要每次自己实现block,用老方法,只需一个地方即可。
2好处
<1很多地方,省略了一个外部的target响应方法
<2响应不需要跨方法,意味着可以省略一个成员变量