ReactiveCocoa(上),ReactiveCocoa(

來源:互聯網
上載者:User

ReactiveCocoa(上),ReactiveCocoa(
ReactiveCocoa常見類

1. RAC中最核心的類RACSiganl:

RACSiganl:訊號類,一般表示將來有資料傳遞,只要有資料改變,訊號內部接收到資料,就會馬上發出資料

解析:

  • 訊號類(RACSiganl),只是表示當資料改變時,訊號內部會發出資料,它本身不具備發送訊號的能力,而是交給內部一個訂閱者去發出。

  • 預設一個訊號都是冷訊號,也就是值改變了,也不會觸發,只有訂閱了這個訊號,這個訊號才會變為熱訊號,值改變了才會觸發。

  • 如何訂閱訊號:調用訊號RACSignal的subscribeNext就能訂閱。

 1 //    建立訊號,首先把didSubscribe儲存到訊號中,還不會觸發 2     + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe 3      4 //    訂閱訊號,才會啟用訊號 5     - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock 6      7 //    當訊號被訂閱,也就是調用signal的subscribeNext:nextBlock 8 //    subscribeNext內部會建立訂閱者subscriber,並且把nextBlock儲存到subscriber中 9 //    subscribeNext內部會調用siganl的didSubscribe10     11     12 //    發送訊號13     - (void)sendNext:(id)value14     15 //    siganl的didSubscribe中調用[subscriber sendNext:@1];16 //    sendNext底層其實就是執行subscriber的nextBlock

 Demo:

 1  RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 2         // block調用時刻:每當有訂閱者訂閱訊號,就會調用block。 3         // 2.發送訊號 4         [subscriber sendNext:@1]; 5         // 如果不在發送資料,最好發送訊號完成,內部會自動調用[RACDisposable disposable]取消訂閱訊號。 6         [subscriber sendCompleted]; 7          8         return [RACDisposable disposableWithBlock:^{ 9             // block調用時刻:當訊號發送完成或者發送錯誤,就會自動執行這個block,取消訂閱訊號。10             // 執行完Block後,當前訊號就不在被訂閱了。11             12             NSLog(@"訊號被銷毀");13             14         }];15     }];16     17     // 3.訂閱訊號,才會啟用訊號.18     [siganl subscribeNext:^(id x) {19         // block調用時刻:每當有訊號發出資料,就會調用block.20         NSLog(@"接收到資料:%@",x);21     }];
View Code

列印結果:

 

 

2. RACSubscriber

表示訂閱者的意思,用於發送訊號,這是一個協議,不是一個類,只要遵守這個協議,並且實現方法才能成為訂閱者。通過create建立的訊號,都有一個訂閱者,協助他發送資料。

 

3. RACDisposable

用於取消訂閱或者清理資源,當訊號發送完成或者發送錯誤的時候,就會自動觸發它。 

  • 使用情境:不想監聽某個訊號時,可以通過它主動取消訂閱訊號。

 

4. RACSubject

RACSubject:訊號提供者,自己可以充當訊號,又能發送訊號。

  • 使用情境:通常用來代替代理,有了它,就不必要定義代理了。

RACReplaySubject:重複提供訊號類,RACSubject的子類。

  • RACReplaySubjectRACSubject區別:

    • RACReplaySubject可以先發送訊號,在訂閱訊號,RACSubject就不可以。
  • 使用情境一:如果一個訊號每被訂閱一次,就需要把之前的值重複發送一遍,使用重複提供訊號類。

  • 使用情境二:可以設定capacity數量來限制緩衝的value的數量,即只緩充最新的幾個值。

 

https://www.jianshu.com/p/87ef6720a096

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.