冷热信号

来源:互联网 发布:英语速成软件 编辑:程序博客网 时间:2024/04/28 23:23

冷热信号区别:

  • 热信号是主动的,即使你没有订阅事件,它仍然会时刻推送
  • 而冷信号是被动的,只有当你订阅的时候,它才会发送消息

  • 热信号可以有多个订阅者,是一对多,信号可以与订阅者共享信息

  • 而冷信号只能一对一,当有不同的订阅者,消息会重新完整发送,热信号像是一个广播。冷信号像是一个模板,不同的订阅者会生成一个实例

  • 热信号会被所有此刻已订阅的地方各执行一次,以后订阅的地方会错过之前的消息

一个很重要的概念

任何信号的转换即是对原信号订阅从而产生新的信号,这样的话,一个信号被转换或者多处订阅会造成这个信号产生多次,如果是网络请求,则会多次请求

为什么要区分冷热信号呢?

为了防止副作用执行多次,例如数据请求执行多次。例如有一个冷信号有多个订阅者,那么在多个订阅者订阅的时候这个冷信号会被创建多次,如果这个信号的创建伴随着数据的请求,那么这个请求会执行多次。这样很浪费流量,也影响速率。

RACSignal的subscirption

  1. [RACSignal createSignal]来获得signal
  2. [signal subscribNext]来获得subscriber,然后进行subscription。
  3. 进入didSubscribe,通过[subscriber sendNext] 来执行next block。

RAC提供了一些把冷信号转换成热信号的方法:

利用multicast进行冷信号转热信号(最重要的方法,其他的都是间接调用此方法)通过RACSubject,RACReplaySubject- (RACMulticastConnection *)publish就是帮忙创建了RACSubject。- (RACSignal *)replay就是用RACReplaySubject来作为subject,并立即执行connect操作,返回connection.signal。其作用是上面提到的replay功能,即后来的订阅者可以收到历史值。- (RACSignal *)replayLast就是用Capacity为1的RACReplaySubject来替换- (RACSignal *)replay的`subject。其作用是使后来订阅者只收到最后的历史值。- (RACSignal *)replayLazily和- (RACSignal *)replay的区别就是replayLazily会在第一次订阅的时候才订阅sourceSignal。

所以,其实本质仍然是

使用一个Subject来订阅原始信号,并让其他订阅者订阅这个Subject,这个Subject就是热信号。


所有的热信号都属于一个类:RACSubject

subject是可变的,是非RAC到RAC的一个桥梁,可以附加行为

subject = 直播 signal = 点播

replaySubject会订阅之前错过的值(可以设置订阅错过的个数)

RACSubject及子类都是热信号,其他都是冷信号。

热信号转换不到冷信号,因为不能满足:每次订阅都重新执行一次block

尽量传出来一个冷信号,然后转为热信号用,如果传出热信号,则回不到冷信号了

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 锦绣城三期 锦绣里 锦绣庄园 锦绣世家 锦绣一方 锦绣嘉苑 锦绣花苑 湘江锦绣 锦绣豪园 盛润锦绣城 锦绣山水 锦绣苑小区 锦绣盈门 锦绣湘江 锦绣天成 锦绣城一期 快穿锦绣之路 快穿锦绣人生 快穿之锦绣人生 锦绣之路快穿 锦绣农女种田忙 毒医太子妃锦绣凰途 深圳锦绣中华 何处锦绣不灰堆 锦绣园华丽冒险 锦绣缘之华丽冒险 锦绣半岛房价 锦绣天下房价 锦绣蓝湾房价 锦绣银湾房价 锦绣华庭楼盘详情 锦绣外滩房价 锦绣香江别墅 锦绣香江楼盘 锦绣御园房价 锦绣华庭三期 锦绣香江价格 蓝光锦绣城二手房 锦绣御景国际 绵绣缘 锦秀