當(dāng)有多個訂閱者障贸,但是我們只想發(fā)送一個信號的時候怎么辦凫乖?這時我們就可以用RACMulticastConnection堪夭,來實現(xiàn)。代碼示例如下
?// 1.發(fā)送請求拣凹,用一個信號內(nèi)包裝,不管有多少個訂閱者恨豁,只想發(fā)一次請求
? ? self.single = [RACSignal createSignal:^RACDisposable *(id subscriber) {
? ? ? ? // 發(fā)送請求
? ? ? ? NSLog(@"發(fā)送請求啦");
? ? ? ? @strongify(self);
? ? ? ? self.count2++;
? ? ? ? // 發(fā)送信號
? ? ? ? [subscribersendNext:[NSStringstringWithFormat:@"connection-消息只需要發(fā)送一次請求即可%ld",(long)self.count2]];
? ? ? ? returnnil;
? ? }];
? ? //2. 創(chuàng)建連接類
? ? RACMulticastConnection *connection = [self.single publish];
? ? [connection.signalsubscribeNext:^(idx) {
? ? ? ? NSLog(@"%@", x);
? ? }];
? ? [connection.signalsubscribeNext:^(idx) {
? ? ? ? NSLog(@"%@", x);
? ? }];
? ? [connection.signalsubscribeNext:^(idx) {
? ? ? ? NSLog(@"%@", x);
? ? }];
? ? //3. 連接嚣镜。只有連接了才會把信號源變?yōu)闊嵝盘?/p>
? ? [connectionconnect];
log打印:
?************************************************************************************
?2018-08-14 16:39:49.783683+0800 RACDemo[2596:73190] 發(fā)送請求啦
?2018-08-14 16:39:49.783996+0800 RACDemo[2596:73190] connection-消息只需要發(fā)送一次請求即可1
?2018-08-14 16:39:49.784373+0800 RACDemo[2596:73190] connection-消息只需要發(fā)送一次請求即可1
?2018-08-14 16:39:49.784623+0800 RACDemo[2596:73190] connection-消息只需要發(fā)送一次請求即可1
普通做法橘蜜,代碼如下:
? ? @weakify(self);
? ? // 普通寫法, 這樣的缺點是:沒訂閱一次信號就得重新創(chuàng)建并發(fā)送請求菊匿,這樣很不友好
? ? RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
? ? ? ? // didSubscribeblock中的代碼都統(tǒng)稱為副作用。
? ? ? ? // 發(fā)送請求---比如afn
? ? ? ? @strongify(self);
? ? ? ? self.count1++;
? ? ? ? NSLog(@"發(fā)送請求啦");
? ? ? ? // 發(fā)送信號
? ? ? ? [subscribersendNext:[NSStringstringWithFormat:@"connection-消息請求%ld次",(long)self.count1]];
? ? ? ? returnnil;
? ? }];
? ? [signalsubscribeNext:^(idx) {
? ? ? ? NSLog(@"%@", x);
? ? }];
? ? [signalsubscribeNext:^(idx) {
? ? ? ? NSLog(@"%@", x);
? ? }];
? ? [signalsubscribeNext:^(idx) {
? ? ? ? NSLog(@"%@", x);
? ? }];
需要訂閱三次计福,打印如下:
?2018-08-14 16:39:43.814304+0800 RACDemo[2596:73190] 發(fā)送請求啦
?2018-08-14 16:39:43.814576+0800 RACDemo[2596:73190] connection-消息請求1次
?2018-08-14 16:39:43.814811+0800 RACDemo[2596:73190] 發(fā)送請求啦
?2018-08-14 16:39:43.814991+0800 RACDemo[2596:73190] connection-消息請求2次
?2018-08-14 16:39:43.816049+0800 RACDemo[2596:73190] 發(fā)送請求啦
?2018-08-14 16:39:43.816599+0800 RACDemo[2596:73190] connection-消息請求3次
?************************************************************************************