当前位置: 首页 > news >正文

俄罗斯网站开发理县网站建设公司

俄罗斯网站开发,理县网站建设公司,怎么建设个人主页网站,南通网站怎么推广#xff08;整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载#xff09; 上一章节简要的说明了如何实现的热信号。但是像那么写#xff0c;貌似不是非常优雅。这一章节我们会把冷热信号转换写的跟ReactiveCocoa一样优雅。 Reactive…整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载 上一章节简要的说明了如何实现的热信号。但是像那么写貌似不是非常优雅。这一章节我们会把冷热信号转换写的跟ReactiveCocoa一样优雅。 ReactiveCocoa内部是如何实现冷热信号转换的呢我们来看个例子    RACSignal *replayLazilySignal [[RACSignal createSignal:^RACDisposable *(idRACSubscriber subscriber) {        NSLog(replaylazily---sendAction);         [subscriber sendNext:replaylazily];         return nil;     }] replayLazily];          [replayLazilySignal subscribeNext:^(id x) {         NSLog(subscribe1----%,x);     }];          [replayLazilySignal subscribeNext:^(id x) {         NSLog(subscribe2----%,x);     }]; 没错只是在原有信号的基础上增加了一个replayLazily方法掉用。我们从输出上可以看看是否转为了热信号。 2015-12-29 13:28:03.588 xxxxxx[40933:6054173] xxxxxx:(232) replaylazily---sendAction 2015-12-29 13:28:03.589 xxxxxx[40933:6054173] xxxxxx:(238) subscribe1----replaylazily 2015-12-29 13:28:03.589 xxxxxx[40933:6054173] xxxxxx:(242) subscribe2----replaylazily 发送只有1次被订阅了两次。那么我们也朝这个目标出发。 我们这次让一个热信号QHQSubject去订阅最初的冷信号偷偷的将返回改成这个热信号偷梁换柱而神不知鬼不觉。 -(QHQSignal *)replayLazily {     QHQMulticastConnection *conn [[QHQMulticastConnection alloc] initWithSourceSignal:self outSignalSubject:[[QHQSubject alloc] init]];     [conn connectSignal];     return conn.connSignal; } 这里用到了一个新类用于做这层转化QHQMulticastConnection它需要一个源和一个订阅信号。当执行connectSignal方法后让热信号订阅最初信号。 -(void)connectSignal {     [_sourceSignal subscribe:_connSignal]; } 让热信号称为接下来流的来源。看似已经天衣无缝了执行下看看结果如何 -(void)demoFourReplayLazily {     QHQSignal *replaySignal [[QHQSignal createSignal:^(id subscriber) {         [subscriber sendNext:replaySignal---send];     }] replayLazily];          [replaySignal subscribeNext:^(id x) {         NSLog(sub1 ---- %,x);     }];          [replaySignal subscribeNext:^(id x) {         NSLog(sub2 ---- %,x);     }]; } 2015-12-29 13:39:59.345 PageText[42204:6070078] replaySignal----send 怎么没有输出订阅的结果呢确实不应该输出结果开始分析下原因。当你掉用replayLazily方法时你已经偷偷摸摸将信号换成了QHQSubject在这个过程中你已经订阅了信号也就是最终的输出结果。让后你再去订阅这个QHQSubject的时候它做不了任何事情因为信号的发送已经过去了过去了了。我们可以做个延迟发送事件看看。     QHQSignal *replaySignal [[QHQSignal createSignal:^(id subscriber) {         NSLog(replaySignal----send);         [subscriber sendNext:replaySignal---send];                  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{             NSLog(Delay-----replaySignal----send);             [subscriber sendNext:Delay-----replaySignal---send];         });              }] replayLazily];          [replaySignal subscribeNext:^(id x) {         NSLog(sub1 ---- %,x);     }];          [replaySignal subscribeNext:^(id x) {         NSLog(sub2 ---- %,x);     }]; 发送了两次事件一次是理解发送另一次做了延迟。看看结果 2015-12-29 13:45:35.560 PageText[42399:6074028] replaySignal----send 2015-12-29 13:45:37.561 PageText[42399:6074028] Delay-----replaySignal----send 2015-12-29 13:45:37.562 PageText[42399:6074028] sub1 ---- Delay-----replaySignal---send 2015-12-29 13:45:37.562 PageText[42399:6074028] sub2 ---- Delay-----replaySignal---send 延迟发送的事件确实收到了说明确实转化成了热信号。但是我们总不能每次都延迟一下吧当然我们可以搞定这个问题我们让热信号把事件存起来订阅这订阅后把事件都发送出去。这个时候需要一个可以保存事件的热信号。 因此我们创建了一个新类继承于QHQSubject interface QHQReplaySubject () property (nonatomic, assign) NSUInteger capacity; property (nonatomic, strong) NSMutableArray *values; end 它会将每次发送来的事件保存在values数组中如果数组容量大于承载capacity将会移除掉更早的事件 -(void)sendNext:(id)next {     [_values addObject:next];     [super sendNext:next];          if (_values.count _capacity) {         [_values removeObjectAtIndex:0];     } } 它每次被订阅时都需要首先将已经保存的信号发送给订阅着 -(void)subscribe:(idQHQSubscrib)sub {     for (id value in _values) {         [sub sendNext:value];     }     [self.subscribers addObject:sub]; } 这样第一次的信号就不会丢失。 -(QHQSignal *)replayLazily {     QHQMulticastConnection *conn [[QHQMulticastConnection alloc] initWithSourceSignal:self outSignalSubject:[QHQReplaySubject replaySubjectWithCapacity:1]];     [conn connectSignal];     return conn.connSignal; } 简单的将热信号替换成能够保存1个老信号的热信号那么问题迎刃而解 2015-12-29 14:02:00.766 PageText[43381:6084580] replaySignal----send 2015-12-29 14:02:00.767 PageText[43381:6084580] sub1 ---- replaySignal---send 2015-12-29 14:02:00.767 PageText[43381:6084580] sub2 ---- replaySignal---send 2015-12-29 14:02:02.768 PageText[43381:6084580] Delay-----replaySignal----send 2015-12-29 14:02:02.769 PageText[43381:6084580] sub1 ---- Delay-----replaySignal---send 2015-12-29 14:02:02.770 PageText[43381:6084580] sub2 ---- Delay-----replaySignal---send   输出符合预期 实际上RAC也是这么做的不过它将所有的接口都处理成线程安全的。转载于:https://www.cnblogs.com/qianhongqiang/p/5085556.html
http://www.zqtcl.cn/news/441247/

相关文章:

  • 网站上海网站建设网站数据建设涉及哪些内容
  • 3d效果图教程网站宁波网站建设慕枫科技
  • 视频结交网站怎么做想创建一个网站
  • 电商网站销售数据分析上海企业信息登记号查询
  • 网站建设规划设计公司排名无锡网站建设 君通科技
  • 徐州网站开发要多少钱给个人网站做百度百科
  • 法语网站建设免费网站为何收录比较慢
  • 品牌网站推广软件seo内链优化
  • 广东律师事务所东莞网站建设做网站 怎么备案
  • shopnc本地生活o2o网站源码wordpress文章内多页效果
  • 深圳全国网站制作哪个好页面设计有哪几种风格
  • 网页设计作业网站素材和效果图夏天做啥网站致富
  • 利用帝国软件如何做网站网站友链交换平台
  • 简述网站开发技术深圳网站设计合理刻
  • wordpress网站名称寻找销售团队外包
  • 一浪网站建设网页qq邮箱
  • 做网站需要注册公司吗夫唯seo系统培训
  • 沈阳人流哪个医院好安全百度关键词优化怎么做
  • 1688网站怎么做分销高质量的网站内容建设
  • 网站建设公司济宁网站转跳怎么做
  • 镇江网站设计多少钱企业网络部署方案
  • 建网站的公司浩森宇特wordpress登录缓存
  • 便宜建站空间战队头像在线制作免费
  • 做招聘网站赚钱吗厦门网站建设哪里好
  • 新乡网站建设哪家公司好阿里巴巴做国际网站多少钱
  • 怎么在悉尼做网站dede做手机网站
  • 企业网站模板免费下载品牌建设专家库推荐表
  • 辽宁智能网站建设推荐网络营销推广方案创意
  • 安阳做一个网站多少钱东营做网站公司
  • 深圳市罗湖网站建设百度自助建站官网