codecamp

ReactiveCocoa 组播原理

什么是组播?组播是多个订阅者共同享用一个订阅信号的术语。通过上一节的内容我们知道在默认的情况下,信号是冷的。但是有时候,我们并不想让冷信号在每一次被订阅时工作。这通常在边界效应、订阅所要执行的任务代价昂贵或者只能以其他方式在适当的时间执行时有这种需求。这时网络请求浮现在脑海中。

所以与其从这样的信号中创建一个RACMulticastConnection不如使用RACSignalpublish方法或者multicast:方法。前者可以创建一个组播连接,后者也一样为您创建一个组播连接但需要一个RACSubject参数。当它被调用时这个RACSubject可以通过底层信号发送一个值出来。任何对这个值有兴趣的,都可以用这个从底层信号发送一个值到连接的信号来替代你提供的RACSubject,这个信号恰好就等同于你的这个RACSubject.

为了说明这种不同,请参考下面的插图:

multiple_subscriptions

由于信号是冷启动的,每增加一个订阅者,她就会被执行一次。这种情况是我们不希望看到的,可以使用组播连接来改善。

multicast_connection

信号的组播连接订阅,当它传送了一个新值的时候,是通过公共频道来传送给信号的。我们可以根据自己的喜好订阅该信号,但这个信号在订阅相关的操作上有且仅会执行一次,而不是像以前那样增加一个订阅者这个信号上就执行一次订阅相关的操作。


ReactiveCocoa热信号与冷信号简介
总结
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }