ReactiveCocoa常見類-RACSiganl-信號(hào)

ViewController.m

#import "ViewController.h"

#import "ReactiveCocoa.h"

@interface ViewController ()
@property (nonatomic, strong) id subscriber; //訂閱者
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 核心:信號(hào)類
    // 信號(hào)類作用:只要有數(shù)據(jù)改變,就會(huì)把數(shù)據(jù)包裝成一個(gè)信號(hào),傳遞出去。
    // 只要有數(shù)據(jù)改變,就會(huì)有信號(hào)發(fā)出。
    // 數(shù)據(jù)發(fā)出,并不是信號(hào)類發(fā)出。
    
    // 1.創(chuàng)建信號(hào) createSignal:didSubscribe(block)
    // RACDisposable:取消訂閱
    // RACSubscriber:發(fā)送數(shù)據(jù)
    
    // createSignal方法:
    // 1.創(chuàng)建RACDynamicSignal // 動(dòng)態(tài)
    // 2.把didSubscribe保存到RACDynamicSignal
    
   RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        // block調(diào)用時(shí)刻:當(dāng)信號(hào)被訂閱的時(shí)候就會(huì)調(diào)用
        // block作用:描述當(dāng)前信號(hào)哪些數(shù)據(jù)需要發(fā)送
        // _subscriber = subscriber;
        // 發(fā)送數(shù)據(jù)
        NSLog(@"調(diào)用了didSubscribe");
        // 通常:傳遞數(shù)據(jù)出去
        [subscriber sendNext:@1];
        // 調(diào)用訂閱者的nextBlock
       
        // 如果信號(hào),想要被取消,就必須返回一個(gè)RACDisposable
        return [RACDisposable disposableWithBlock:^{
          
            // 信號(hào)什么時(shí)候被取消:1.自動(dòng)取消,當(dāng)一個(gè)信號(hào)的訂閱者被銷毀的時(shí)候,就會(huì)自動(dòng)取消訂閱 2.主動(dòng)取消
            // block調(diào)用時(shí)刻:一旦一個(gè)信號(hào),被取消訂閱的時(shí)候就會(huì)調(diào)用
            // block作用:當(dāng)信號(hào)取消訂閱,用于清空一些資源
            NSLog(@"取消訂閱");
        }];
    }];
    
    // subscribeNext:
    // 1.創(chuàng)建訂閱者
    // 2.把nextBlock保存到訂閱者里面
    // 訂閱信號(hào)
    // 只要訂閱信號(hào),就會(huì)返回一個(gè)取消訂閱信號(hào)的類
    RACDisposable *disposable = [siganl subscribeNext:^(id x) {
       
        // block:只要信號(hào)內(nèi)部發(fā)送數(shù)據(jù),就會(huì)調(diào)用這個(gè)block
        NSLog(@"%@",x);
    }];
    
    // 取消訂閱
    // [disposable dispose];
    
    // RACSignal使用步驟:
    // 1.創(chuàng)建信號(hào)
    
    // 2.訂閱信號(hào)
    
    // RACSignal底層實(shí)現(xiàn):
    // 1.當(dāng)一個(gè)信號(hào)被訂閱,創(chuàng)建訂閱者,并且把nextBlock保存到訂閱者里面
    // 2.[RACDynamicSignal subscribe:RACSubscriber]
    // 3.調(diào)用RACDynamicSignal的didSubscribe
    // 4.[subscriber sendNext:@1];
    // 5.拿到訂閱者的nextBlock調(diào)用
}
@end

//2016-08-14 22:08:18.056 ReactiveCocoa[35989:1720465] 調(diào)用了didSubscribe
//2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 1
//2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 取消訂閱
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容