(轉) ReactiveCocoa之RACSignal核心類的使用

RACSignal使用步驟:
1.創建信號 + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
2.訂閱信號,才會激活信號. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
3.發送信號 - (void)sendNext:(id)value

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 *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {  
          
          
        // block調用時刻:每當有訂閱者訂閱信號,就會調用block。  
        // 發送信號  
        [subscriber sendNext:@"ws"];  
        // 如果不在發送數據,最好發送信號完成,內部會自動調用[RACDisposable disposable]取消訂閱信號。  
        [subscriber sendCompleted];  
          
          
          
          
          
        // 取消信號,如果信號想要被取消,就必須返回一個RACDisposable  
        // 信號什么時候被取消:1.自動取消,當一個信號的訂閱者被銷毀的時候機會自動取消訂閱,2.手動取消,  
        //block什么時候調用:一旦一個信號被取消訂閱就會調用  
        //block作用:當信號被取消時用于清空一些資源  
        return [RACDisposable disposableWithBlock:^{  
              
            // block調用時刻:當信號發送完成或者發送錯誤,就會自動執行這個block,取消訂閱信號。  
              
            // 執行完Block后,當前信號就不在被訂閱了。  
            NSLog(@"取消訂閱");  
        }];  
    }];  
      
      
      
    // 2. 訂閱信號  
    //subscribeNext  
    // 把nextBlock保存到訂閱者里面  
    // 只要訂閱信號就會返回一個取消訂閱信號的類  
    RACDisposable *disposable = [signal subscribeNext:^(id x) {  
          
        // block調用時刻:每當有信號發出數據,就會調用block.  
         NSLog(@"接收到數據:%@",x);  
    }];  
    // 取消訂閱  
    [disposable dispose];  
  • RACSignal總結:
    一.核心:
    1.核心:信號類
    2.信號類的作用:只要有數據改變就會把數據包裝成信號傳遞出去
    3.只要有數據改變就會有信號發出
    4.數據發出,并不是信號類發出,信號類不能發送數據
    一.使用方法:
    1.創建信號
    2.訂閱信號
    二.實現思路:
    1.當一個信號被訂閱,創建訂閱者,并把nextBlock保存到訂閱者里面。
    2.創建的時候會返回 [RACDynamicSignal createSignal:didSubscribe];
    3.調用RACDynamicSignal的didSubscribe
    4.發送信號[subscriber sendNext:value];
    5.拿到訂閱者的nextBlock調用
    注:轉載自http://blog.csdn.net/y_csdnblog_xx/article/details/51480181
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • RAC使用測試Demo下載:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees閱讀 6,489評論 3 10
  • 1.ReactiveCocoa常見操作方法介紹。 1.1 ReactiveCocoa操作須知 所有的信號(RACS...
    萌芽的冬天閱讀 1,042評論 0 5
  • 前言 之前對RAC有了一個基本的認識,了解了它的作用,以及RAC的運行機制,我們知道只要是信號(RACSignal...
    大大盆子閱讀 4,518評論 0 11
  • 1.ReactiveCocoa簡介 ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用于i...
    愛睡覺的魚閱讀 1,157評論 0 1
  • 米小圈有一個弟弟叫大牛,他是一個讓人倒霉的家伙。大牛每次來米小圈家的第一件事就是找零食,米小圈很不喜歡這個...
    小筍芽晉梓鑫閱讀 848評論 0 0