ReactiveCocoa
jianglast
这个作者很懒,什么都没留下…
展开
-
RACSignal+Operations方法(一)
这次分析下RACSignal+Operations里面的方法,由于里面的方法太多了,所以拆分成两篇分析。下面各个方法的测试用例在这里。像doNext: doError: doCompleted:在这边文章中已经分析过了,没有看过的请去看一下,接下来按照顺序分析其他方法。- (RACSignal *)throttle:(NSTimeInterval)interval { ...原创 2018-08-04 02:00:10 · 1094 阅读 · 0 评论 -
RACSequence分析(九)—— RACTupleSequence
RACTupleSequence作为RACSequence的子类,顾名思义,就是对元祖的操作,根据新增加的方法sequenceWithTupleBackingArray:offset:可知,该类是对元祖的数组对象做处理。完整测试用例在这里。.m中的方法如下:+ (instancetype)sequenceWithTupleBackingArray:(NSArray *)backingA...原创 2018-08-18 14:59:17 · 136 阅读 · 0 评论 -
RACSequence分析(十)—— RACEagerSequence
RACEagerSequence作为RACArraySequence的子类,顾名思义,就是热序列。想要知道与冷序列的区别,就看看.m中的方法是如何实现的。完整测试用例在这里。+ (instancetype)return:(id)value { return [[self sequenceWithArray:@[ value ] offset:0] setNameWithForm...原创 2018-08-19 12:23:17 · 162 阅读 · 0 评论 -
RACSubscriber
前面把RACStream及其子类RACSignal RACSequence 全部分析完了,接下来分析订阅者RACSubscriber。RACSubscriber.h中主要定义了RACSubscriber的协议方法,可以供其他类(如RACPassthroughSubscriber RACSubject RACChannelTerminal 遵守),而RACSubscriber+Private.h...原创 2018-08-22 19:01:17 · 266 阅读 · 0 评论 -
RACPassthroughSubscriber
上一节中讲了RACSubscriber,其中说到了RACPassthroughSubscriber遵守了RACSubscriber协议,所以接下来分析RACPassthroughSubscriber。在RACPassthroughSubscriber.h中发现只有一个方法:- (instancetype)initWithSubscriber:(id<RACSubscriber>...原创 2018-08-22 19:01:55 · 253 阅读 · 0 评论 -
RACSubscriber与RACPassthroughSubscriber应用
前面把RACSubscriber和RACPassthroughSubscriber里面的每个方法全部分析了一遍,接下来通过信号的一次订阅过程,分析下这两个类的实际运用。以下用到的完整测试用例在这里。测试用例:- (RACSignal *)createSignal{ return [RACSignal createSignal:^RACDisposable *(id<RA...原创 2018-08-22 19:02:42 · 304 阅读 · 0 评论 -
RACSubject(一)
RACSubject作为RACSignal的子类,也遵循了RACSubscriber协议,而且如果对信号有所了解,应该知道RACSubject就是热信号。接下来就分析下RACSubject的源码。首先,看下.h文件。里面有关于这个类的注释:/// A subject can be thought of as a signal that you can manually control by...原创 2018-08-24 21:05:05 · 922 阅读 · 0 评论 -
RACSubject(二)—— RACBehaviorSubject和RACReplaySubject
这里分析RACSubject的子类RACBehaviorSubject和RACReplaySubject。下面用到的测试用例在这里。先分析RACBehaviorSubject。首先,打开.h文件,查看这个类的注释:A behavior subject sends the last value it received when it is subscribed to.翻译如...原创 2018-08-24 22:04:25 · 608 阅读 · 0 评论 -
RAC 在调试中的好处 ----- rac_signalForSelector
不熟悉RAC的可能不知道这个方法,这个方法的作用就是将一个对象的方法触发事件转换成信号,通过对该信号的订阅获取该方法执行的时机。那么使用该方法的优势是什么呢?想一下,在做项目的时候,对于系统的或者第三方的实例方法,如果我们想要在对应的方法中执行其他额外操作,会如何操作呢?一般来说,就会使用Runtime黑魔法替换方法,然后在替换后的方法中做需要的操作。但是,这种方法需要新建类目,在类目...原创 2018-09-11 17:25:15 · 2960 阅读 · 0 评论 -
RACChannelTerminal与RACChannel
RACChannelTerminal作为RACSignal的子类,同时也遵守了RACSubscriber协议。但是,该类是放在RACChannel文件中的,所以与RACChannel关系密切。所以接下来会分别对这两个类同时分析。首先,分析RACChannelTerminal类,打开RACChannel.h文件:/// Represents one end of a RACChannel...原创 2018-09-08 18:53:10 · 491 阅读 · 0 评论 -
RACKVOChannel
RACKVOChannel作为RACChannel的子类,根据名字可以知道,主要用于KVO。首先,看下.h文件:#define RACChannelTo(TARGET, ...) \metamacro_if_eq(1, metamacro_argcount(__VA_ARGS__)) \ (RACChannelTo_(TARGET, __VA_ARGS__, nil)) \ ...原创 2018-09-08 18:54:11 · 303 阅读 · 0 评论 -
NSNotificationCenter+RACSupport把我坑了
熟悉RAC的,应该都知道它本身针对iOS系统类提供了许多类目用于增加方法,方便使用。但是,今天在使用NSNotificationCenter+RACSupport的时候遇到了坑,接下来便分享出来。下面用到的完成测试用例在这里。首页,建立两个页面A、B,然后A订阅通知,B发送通知,观察通知的传递。 当点击A中的按钮跳转的B的页面时,B发送通知,这时候A收到通知。日志如下2018-09-...原创 2018-09-06 19:03:01 · 1158 阅读 · 0 评论 -
RACCommand
前面写的RAC都是与获取数据、数据绑定相关的。如果遇到事件的处理,是没法应用的。而RACCommand就是一个用于处理事件的类。首先,还是先查看.h文件。/// The domain for errors originating within `RACCommand`.extern NSString * const RACCommandErrorDomain;定义一个域值,代表由RACC...原创 2018-10-23 18:51:49 · 659 阅读 · 0 评论 -
RACSubscriber在订阅中的生命周期
这一篇分析过 RACScriber 的生命周期,今天发现了一个新的问题,重新分析下在耗时操作中 RACScriber 的声明周期。下面的完整测试用例在这里。先看下正常情况信号订阅的例子:- (void)test1{ RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber>...原创 2018-11-15 09:23:27 · 312 阅读 · 0 评论 -
RACSequence分析(八)—— RACStringSequence
RACStringSequence作为RACSequence的子类,顾名思义,就是处理string数据的。完整测试用例在这里。分析.m中的方法:+ (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset { NSCParameterAssert(offset <= str...原创 2018-08-18 14:58:42 · 142 阅读 · 0 评论 -
RACSequence分析(七)—— RACSignalSequence
RACSignalSequence作为RACSequence的子类,提供了一个方法通过RACSignal初始化一个RACSequence。完整测试用例在这里。查看.m中的方法:+ (RACSequence *)sequenceWithSignal:(RACSignal *)signal { RACSignalSequence *seq = [[self alloc] init]...原创 2018-08-18 14:58:11 · 181 阅读 · 0 评论 -
RACSignal+Operations方法(二)
接下来把RACSignal+Operations中剩下的方法分析完。下面方法的所有测试用例在这里。- (RACSignal *)switchToLatest { return [[RACSignal createSignal:^(id<RACSubscriber> subscriber) { RACMulticastConnection *conne...原创 2018-08-05 16:11:26 · 298 阅读 · 0 评论 -
RACSignal中的方法解读
这篇文章将RACSignal中的方法从头到尾分析一遍。阅读前请下载这个项目,里面有对每个方法的测试。+ (RACSignal *)createSignal:(RACDisposable * (^)(id&lt;RACSubscriber&gt; subscriber))didSubscribe { return [RACDynamicSignal createSignal:di...原创 2018-07-23 13:59:32 · 772 阅读 · 0 评论 -
RACSignal对RACStream的方法实现 - 测试用例
本来打算继续把方法写完再进行各个方法的测试的,今天突然觉得还是紧跟着写个实例比较好,既容易记忆,又容易理解。项目地址方法说明请结合文章和例子看每个方法的实现和使用。下篇文章单独讲解RACSignal中的方法实现。...原创 2018-07-12 16:36:08 · 116 阅读 · 0 评论 -
RACSignal的使用方法 - 对RACStream的实现(二)
上篇文章 讲到RACStream中主要的方法就是bind:和flattenMap:,而flattenMap:也是通过调用bind:方法实现的,那bind:方法的实质是什么?其实根据bind:方法注释的几个点,可以知道其就是对信号的信号进行的订阅,获取到信号的信号所发送的值信息。正如flattenMap:方法的参数可以获取一个RACStream对象,flatten的注释Returns a strea...原创 2018-07-11 17:03:08 · 313 阅读 · 0 评论 -
RACSignal的使用方法 - 对RACStream的实现(一)
RACSignal有很多的方法,包括对父类RACStream方法的实现、RACSignal.m中的方法、RACSignal+Operations.m中的方法,今天先分析下是如何实现RACStream中的方法的。RACStream的介绍打开RACStream.h文件,可以看到里面都很多的方法,然后打开RACStream.m里面,看看各个方法的调用,就会发现其实众多的方法最终都是调用了...原创 2018-07-10 15:45:07 · 310 阅读 · 0 评论 -
放心使用ReactiveCocoa : RACSignal生命周期
放心使用ReactiveCocoa : RACSignal生命周期为什么要关心RACSignal的生命周期呢?原因有两点: 1. 网上关于ReactiveCocoa的教程很少,一般都是说些用法,而ReactiveCocoa很多的函数方法没有涉及到。 2. ReactiveCocoa里面很多的block很容易出现内存泄露,了解了信号的生命周期会更得心应手的使用此框架。如果你已经在使用了...原创 2018-07-05 16:31:56 · 755 阅读 · 0 评论 -
RACTuple分析
了解过swift的人应该知道元祖,而RACTuple就相当于元祖。下面分析中用到的所有测试用例在这里。首先看下.h中的文件。#define RACTuplePack(...) \ RACTuplePack_(__VA_ARGS__)#define RACTuplePack_(...) \([RACTuple tupleWithObjectsFromArray:@[ m...原创 2018-08-18 14:29:44 · 1146 阅读 · 0 评论 -
RACSequence分析(一)
RACSequence 顾名思义就是序列,也就是存放一系列数据的集合。当然oc中也有这种数据类型,比如NSArray NSSet等等。那这些有什么区别呢,遇到数据处理又该选择使用哪一个呢?带着这些问题,去看下RACSequence的实现。完整测试用例在这里。RACSequence继承于RACStream,也是一种 流 的概念,所以对于RACStream的操作方法,RACSequence也是...原创 2018-08-18 14:52:59 · 1038 阅读 · 0 评论 -
RACSequence分析(二)—— RACDynamicSequence
RACDynamicSequence 作为RACSequence的子类,只提供了一个新的方法sequenceWithLazyDependency:headBlock:tailBlock:,供父类bind:passingThroughValuesFromSequence:方法中调用。完整测试用例在这里。打开.m文件,从上往下看代码: * #define DEALLOC_OVERFLOW_G...原创 2018-08-18 14:55:07 · 194 阅读 · 0 评论 -
RACSequence分析(三)—— RACEmptySequence
RACEmptySequence作为RACSequence的子类,代表一个空的序列,看下.m里面的方法。完整测试用例在这里。+ (instancetype)empty { static id singleton; static dispatch_once_t pred; dispatch_once(&pred, ^{ singleton...原创 2018-08-18 14:56:02 · 153 阅读 · 0 评论 -
RACSequence分析(四)—— RACUnarySequence
RACUnarySequence作为RACSequence的子类,Unary的意思是一元的,注释Private class representing a sequence of exactly one value也说明了该类只包含一个值。完整测试用例在这里。看看.m中方法的作用+ (instancetype)return:(id)value { RACUnarySequen...原创 2018-08-18 14:56:36 · 101 阅读 · 0 评论 -
RACSequence分析(五)—— RACArraySequence
RACArraySequence作为RACSequence的子类,提供一个额外的方法,同样的,还是进入.m中分析。完整测试用例在这里。+ (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset { NSCParameterAssert(offset <= array.count)...原创 2018-08-18 14:57:07 · 314 阅读 · 0 评论 -
RACSequence分析(六)—— RACIndexSetSequence
RACIndexSetSequence作为RACSequence的子类,通过名字可以知道该类与NSIndexSet类有关系。如果对NSIndexSet不了解的,可以先看下这篇文章。完整测试用例在这里。接下来对.m中的方法进行分析。+ (instancetype)sequenceWithIndexSet:(NSIndexSet *)indexSet { NSUIntege...原创 2018-08-18 14:57:41 · 134 阅读 · 0 评论 -
RACCommand 在 Tests 文件中的正确使用
虽说使用 RAC 有了一段时间,但是今天发现了一个莫名其妙的问题。当我的 viewmodel 中含有 RACCommand 的对象时,在 tests 文件中进行测试发现会崩溃,而且这个崩溃不能让人理解。后来发现是文件关联的 target 不正确导致的。感兴趣的可以在这里下载代码。首先看下我的测试代码如图所示:这里有三个 ViewModel ,关联的 target 是不一样的。他们的关联关系...原创 2019-01-24 15:16:49 · 112 阅读 · 0 评论