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

原文地址:https://www.cnblogs.com/dzq1991/p/6237835.html