RAC主要信號類學(xué)習(xí)

一,RACSignal


//1,創(chuàng)建一個(gè)冷信號径玖,這個(gè)時(shí)候會把代碼存儲到block中辕羽,當(dāng)?shù)诙接嗛喰盘柕臅r(shí)候會調(diào)用block內(nèi)容(如果需要傳遞數(shù)據(jù)過去,用subscriber進(jìn)行即可,如下)    

RACSignal *signal = [RACSignal createSignal:^RACDisposable *(idsubscriber) {

NSLog(@"ok, excute me");

[subscriber sendNext:@"I am the subscriber sending message"];

return  nil;

}];

//2,訂閱信號气筋,使冷信號變熱信號,這個(gè)時(shí)候會調(diào)用之前保存的代碼并執(zhí)行block

[signal subscribeNext:^(id x) {

NSLog(@"I got a message from subscriber");

//x是信號中傳遞過來的信息

NSLog(@"%@",x);

}];

二旋圆,RACDisposal

1,RACDisposal會自動取消訂閱

    //RACDisposal(用于取消訂閱或者清理資源宠默,當(dāng)信號發(fā)送完成或者發(fā)送錯(cuò)誤的時(shí)候就會自動觸發(fā))
    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        //這里需要注意一下,RACSubscriber是一個(gè)協(xié)議灵巧,只要遵守協(xié)議就可以成為訂閱者
        
        NSLog(@"ok,這里是暫時(shí)保存的block");
        [subscriber sendNext:@"發(fā)送數(shù)據(jù)"];
        
        return [RACDisposable disposableWithBlock:^{
            NSLog(@"在這里自動取消訂閱搀矫,清空資源等等");
            //如果不想在這個(gè)時(shí)候取消而是需要在特定時(shí)刻手動取消訂閱,需要強(qiáng)引用subscriber這個(gè)對象
        }];
        
    }];
    
    [signal subscribeNext:^(id x) {
       
        //訂閱之后就可以接收數(shù)據(jù)了
        NSLog(@"%@",x);
        
    }];

2,RACDisposal手動取消訂閱

   //1,創(chuàng)建信號并強(qiáng)引用subscriber
    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        //這里需要注意一下刻肄,RACSubscriber是一個(gè)協(xié)議瓤球,只要遵守協(xié)議就可以成為訂閱者
        self.subscriber = subscriber;
        
        NSLog(@"ok,這里是暫時(shí)保存的block");
        [subscriber sendNext:@"發(fā)送數(shù)據(jù)"];
        
        return [RACDisposable disposableWithBlock:^{
            NSLog(@"手動取消訂閱,會來到這里敏弃,清空資源等等");
        }];
        
    }];
    
    //2卦羡,取出訂閱方法返回值
    RACDisposable *disposable = [signal subscribeNext:^(id x) {
        
        //訂閱之后就可以接收數(shù)據(jù)了
        NSLog(@"%@",x);
    }];
    
    //3,用訂閱返回值手動取消訂閱
    [disposable dispose];

三,RACSubject
/*
RACSubject之所以發(fā)送數(shù)據(jù)麦到,是因?yàn)樗袷亓?lt;RACSubscriber>绿饵,作為一個(gè)遵守了<RACSubscriber>協(xié)議的RACSignal的子類,所以說它既可以創(chuàng)建信號瓶颠,自身又可以發(fā)送數(shù)據(jù)
*/

    //1,創(chuàng)建信號
    RACSubject *subject = [RACSubject subject];
    
    //2拟赊,訂閱信號
    [subject subscribeNext:^(id x) {
        NSLog(@"訂閱者01接收到數(shù)據(jù)------%@",x);
    }];
    [subject subscribeNext:^(id x) {
        NSLog(@"訂閱者02接收到數(shù)據(jù)------%@",x);
    }];
    
    //3, 發(fā)送信號數(shù)據(jù)
    [subject sendNext:@"ok, message send"];

四,RACReplaySubject

  • /*
    
    RACReplaySubject和RACSubject的不同之處在于:
    1,RACReplaySubject在發(fā)送信號數(shù)據(jù)的時(shí)候只是保存block粹淋,并沒有遍歷自身的訂閱著執(zhí)行block吸祟,而RACSubject在發(fā)送數(shù)據(jù)的時(shí)候就已經(jīng)遍歷了自身訂閱者執(zhí)行block
    2,因此桃移,RACSubject必須要在發(fā)送數(shù)據(jù)的之前創(chuàng)建訂閱者欢搜,也就是需要在發(fā)送數(shù)據(jù)之前訂閱信號(訂閱信號的時(shí)候創(chuàng)建訂閱者),而RACReplaySubject則可以先發(fā)送數(shù)據(jù)谴轮,之后再訂閱信號炒瘟,因?yàn)樗诎l(fā)送數(shù)據(jù)的時(shí)候只是保存block,真正調(diào)用時(shí)在訂閱者創(chuàng)建之后才會重新激活調(diào)用發(fā)送數(shù)據(jù)的block
    */
    //1,創(chuàng)建信號
    RACReplaySubject *replaySubject = [RACReplaySubject subject];
    
    //4,也可以先發(fā)送數(shù)據(jù)
    [replaySubject sendNext:@"先發(fā)送數(shù)據(jù)第步,后訂閱也可以"];
    
    //2疮装,訂閱信號
    [replaySubject subscribeNext:^(id x) {
        NSLog(@"訂閱者01接受到數(shù)據(jù)----%@",x);
    }];
    [replaySubject subscribeNext:^(id x) {
        NSLog(@"訂閱者02接受到數(shù)據(jù)----%@",x);
    }];
    //3, 發(fā)送信號數(shù)據(jù)
    [replaySubject sendNext:@"ok, message send"];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缘琅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子廓推,更是在濱河造成了極大的恐慌刷袍,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件樊展,死亡現(xiàn)場離奇詭異呻纹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)专缠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門雷酪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涝婉,你說我怎么就攤上這事哥力。” “怎么了墩弯?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵吩跋,是天一觀的道長。 經(jīng)常有香客問我渔工,道長锌钮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任引矩,我火速辦了婚禮梁丘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脓魏。我一直安慰自己兰吟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布茂翔。 她就那樣靜靜地躺著混蔼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪珊燎。 梳的紋絲不亂的頭發(fā)上惭嚣,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音悔政,去河邊找鬼晚吞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谋国,可吹牛的內(nèi)容都是我干的槽地。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捌蚊!你這毒婦竟也來了集畅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤缅糟,失蹤者是張志新(化名)和其女友劉穎挺智,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窗宦,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赦颇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赴涵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媒怯。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖句占,靈堂內(nèi)的尸體忽然破棺而出沪摄,到底是詐尸還是另有隱情躯嫉,我是刑警寧澤纱烘,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站祈餐,受9級特大地震影響擂啥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帆阳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一哺壶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒谤,春花似錦山宾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阶祭,卻和暖如春绷杜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背濒募。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工鞭盟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瑰剃。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓齿诉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子粤剧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容