RAC入门学习

RAC - RACSignal

2018-08-12  本文已影响12人  南山青稞酒

信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据们就会马上发出数据。

RACSignal 简单使用

- (void)viewDidLoad {
    [super viewDidLoad];
    //RACSignal 底层实现
    
    /*
     // RACSignal底层实现:
     // 1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
     // 2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
     // 2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。
     // 2.1 subscribeNext内部会调用siganl的didSubscribe
     // 3.siganl的didSubscribe中调用[subscriber sendNext:@1];
     // 3.1 sendNext底层其实就是执行subscriber的nextBlock
    */
    
    //RACSignal 使用步骤:
    
    // 创建信号
    
    RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        
        // block 时刻被调用 : 每当有订阅者订阅信号,就会调用信号
        
        
        // 发送数据
        [subscriber sendNext:@1];
        
        
        // 如果不在发送数据 ,最好发送信号完成 ,内部会自动调用 [RACDisposable disposable] 取消订阅信号
        
        [subscriber sendCompleted];
        
        return [RACDisposable disposableWithBlock:^{
            // block 调用时刻 :当信号 发送完成或者发送错误,就会自动执行这个block 取消订阅信号
            
            // 执行完block 当前信号就不会在被订阅了
            
            // 执行完 后 信号就会被销毁  再次发送数据也不会被调用了
        }];
    }];
    
    
    
    
    // 订阅信号
    
    // 不订阅信 ,信号一直处于冷信号状态 只有订阅后 信号处于被激活状态
    
    [signal subscribeNext:^(id  _Nullable x) {
        // 每当 有信号发送数据  这个block 就会被调用
        NSLog(@"%@",x);
    }];
}


上一篇 下一篇

猜你喜欢

热点阅读