reactiveCocoa使用

时间:2023-03-09 22:52:26
reactiveCocoa使用

@代理

简介:使用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响应不需要跨方法,意味着可以省略一个成员变量