
ReactiveCocoa
那夜的星空分外清澈
学如逆水行舟,不进则退。
展开
-
ReactiveCocoa 学习笔记一(RACStream)
RACStream在 ReactiveCocoa 框架中,RACStream 是所有信号流的抽象类,所有基于流的操作都可以建立在该类之上。其包含5个需要子类重写的方法:empty、return:、bind:、concat:、zipwith:。empty 方法返回一个空的流,而 return: 方法则返回包含一个指定值的流。+ (__kindof RACStream<Valu...原创 2018-07-31 19:00:30 · 586 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十四(RACSupport)
RACSupport为了更好的支持 ReactiveCocoa 框架,故扩展了名为 RACSupport 的分类,以便于向 CocoaTouch 框架中的类添加了支持 ReactiveCocoa 框架的相关方法。NSData (RACSupport)该分类中提供了一个方法用来读取 URL 位置的数据,并且将数据或错误信息传递给信号流。这个信号流就是该方法返回的信号流,且是 RACRepl...原创 2018-11-05 09:51:35 · 238 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十五(RACSignalSupport)
RACSignalSupportRACSignalSupport 是 ReactiveCocoa 框架中为 CocoaTouch 框架中的一些类声明的扩展类,其旨在为这些类添加信号流的特性。视图的重用MKAnnotationView (RACSignalSupport)UICollectionReusableView (RACSignalSupport)UITableViewCel...原创 2018-11-05 09:52:24 · 707 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十六(RACCommandSupport)
RACCommandSupport在 ReactiveCocoa 框架中,RACCommand 类可以将信号流作为信号量进行接收,从而可以封装一系列处理不同任务的信号流。为了扩展该类的用法,框架为下面几个类声明了 RACCommandSupport 分类。UIBarButtonItemUIButtonUIRefreshControl这三个类所扩展的分类中都声明了一个属性,并实现了设置...原创 2018-11-05 09:52:55 · 388 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十七(RACKeyPathUtilities)
RACKeyPathUtilitiesReactiveCocoa 中声明了一个 NSString 的分类,名为 RACKeyPathUtilities 。其主要是为了方便对键值路径的操作。拆分路径,返回属性名称的集合- (NSArray *)rac_keyPathComponents;移除路径的最后一个部分- (NSString *)rac_keyPathByDeletingL...原创 2018-11-11 22:08:51 · 139 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十八(RACTypeParsing)
RACTypeParsing在 ReactiveCocoa 框架中,为 NSInvocation 类扩展了一个 RACTypeParsing 分类。该分类提供了快速设置、获取方法参数的方法,并且提供了一个类型为 RACTuple 的属性。设置参数- (void)rac_setArgument:(id)object atIndex:(NSUInteger)index;该方法会设置指定索...原创 2018-11-11 22:09:26 · 146 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十九(NSObject)
NSObject 分类为了提供更多特性,ReactiveCocoa 框架为 NSObject 类扩展了多个分类。所以,所有 NSObject 的子类都可以调用这些分类中的方法。RACDeallocatingRACDeallocating 分类中提供了一个 rac_willDeallocSignal 方法,该方法可以返回一个信号流,当该类的实例被释放时,这个信号流会立即传递一个结束信号量。所以...原创 2018-11-11 22:10:21 · 575 阅读 · 0 评论 -
ReactiveCocoa 学习笔记二十(RACDelegateProxy & RACKVOProxy & RACValueTransformer)
RACDelegateProxyRACDelegateProxy 是 ReactiveCocoa 框架内部使用的类,它作为一个中间层,封装了一个代理实例。- (instancetype)initWithProtocol:(Protocol *)protocol;在使用上面的方法创建一个中间代理对象时,需要提供代理遵循的协议,相应的调用下面的方法时,所提供的方法应当属性该协议。- (RAC...原创 2018-11-15 14:27:48 · 512 阅读 · 0 评论 -
ReactiveCocoa 学习笔记二十一(RACPassthroughSubscriber & RACSubscriptingAssignmentTrampoline)
RACPassthroughSubscriberRACPassthroughSubscriber 是 ReactiveCocoa 框架中的一个内部类,其遵循 <RACSubscriber> 协议,所以可以作为一个订阅者订阅信号流。但是,其只是作为一个中转,会将接收到的信号量转发为真正的订阅者。- (instancetype)initWithSubscriber:(id<RAC...原创 2018-11-15 14:29:18 · 594 阅读 · 0 评论 -
ReactiveCocoa 学习笔记二十二(RACEXTRuntimeExtensions)
RACEXTRuntimeExtensionsRACEXTRuntimeExtensions 中定义了两个函数用来进行运行时的操作,并且声明了一个结构体用来描述属性的特征。typedef enum { rac_propertyMemoryManagementPolicyAssign = 0, rac_propertyMemoryManagementPolicyRetain, ...原创 2018-11-15 14:30:10 · 338 阅读 · 0 评论 -
ReactiveCocoa 学习笔记二十三(Operations)
OperationsOperations 是 ReactiveCocoa 框架中 RACSignal 的扩展,其定义了许多方法来扩展信号流的使用。实例方法向已经存在的信号流中注入额外的操作- (RACSignal&lt;ValueType&gt; *)doNext:(void (^)(ValueType _Nullable x))block RAC_WARN_UNUSED_RESULT...原创 2018-11-23 09:51:46 · 363 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十一(RACSequence)
RACSequenceRACSequence 继承了 RACStream 父类,所以它本身是具有信号流的特性的,这同它的兄弟类 RACSignal 相似,而不同的是,其所传递的信号量由其本身持有,即它持有一系列的值作为信号量传递给被执行的任务。并且,该类实现了 NSFastEnumeration 协议,具有类似于 Cocoa 中集合的特性。RACSequence 如类簇一般,其包含的 head...原创 2018-10-30 19:33:24 · 280 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十三(RACSequenceAdditions)
RACSequenceAdditions在 ReactiveCocoa 框架中,为了方便获取由集合对象创建的 RACSequence 实例对象,而扩展了名为 RACSequenceAdditions 的分类。扩展了分类的相关类如下:NSArrayNSDictionaryNSEnumeratorNSIndexSetNSOrderSetNSSetNSString这些类的扩展类大...原创 2018-10-31 15:28:51 · 215 阅读 · 0 评论 -
ReactiveCocoa 学习笔记二(RACSignal)
RACSignal创建实例方法RACSignal 是 RACStream 的子类,它提供了创建信息流实例的类方法。createSignal:+ (RACSignal *)createSignal:(RACDisposable * (^)(id&lt;RACSubscriber&gt; subscriber))didSubscribe { return [RACDyna...原创 2018-08-19 19:35:36 · 411 阅读 · 0 评论 -
ReactiveCocoa 学习笔记三(RACTuple)
RACTuple在 CocoaReactive 中,有些信号流传递的信号量是由其他多个信号流传递的信号量组合而成的,而这多个信号量则是封装在一个 RACTuple 实例中进行传递的,所以理解该类,有助于我们理解信号量的使用。其实该类的使用十分简单,通常只要了解两个宏即可,一个是将变量封装成实例的 RACTuplePack(…) ,另一个则是将封装的变量解析成相应变量的 RACTupleUn...原创 2018-08-27 22:50:49 · 1157 阅读 · 0 评论 -
ReactiveCocoa 学习笔记四(RACSubject)
RACSubjectRACSubject 是 RACSignal 的子类,其作为信号流的同时又遵循了 <RACSubscriber> 协议,这就使其能够主动的发送信号量给订阅者。RACSubject 同样重写了订阅方法 - (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber ,在该方法中,订阅者将会被保存...原创 2018-09-02 23:28:41 · 262 阅读 · 0 评论 -
ReactiveCocoa 学习笔记五(RACChannel)
RACChannelRACChannel 持有两个信号流,这两个信号流的订阅者所接收到的信号量并不是来自自己所订阅的信号流,而是另一个信号流。类似于相连的两个终端,每个终端所产生的数据都是要传递到另一个终端的。@property (nonatomic, strong, readonly) RACChannelTerminal&amp;lt;ValueType&amp;gt; *leadingTermi...原创 2018-09-09 21:17:31 · 782 阅读 · 0 评论 -
ReactiveCocoa 学习笔记六(RACMulticastConnection)
RACMulticastConnection一般订阅 RACSignal 信号流时,都要执行一次创建该流时提供的 didSubscribe 代码块参数。但是,有些情况 didSubscribe 只宜执行一次,如同组播一样,后续订阅者只是加入监听信号流的组中。RACMulticastConnection 是 NSObject 的子类,可以实现上述的情况,其实际是将一个 RACSubject ...原创 2018-09-09 21:19:17 · 202 阅读 · 0 评论 -
ReactiveCocoa 学习笔记七(RACCommand)
RACCommandRACCommand 关键的两个方法如下,理解了他们便能理解 RACCommand 的作用。- (instancetype)initWithEnabled:(nullable RACSignal<NSNumber *> *)enabledSignal signalBlock:(RACSignal<ValueType> * (^)(InputT...原创 2018-09-16 17:37:47 · 627 阅读 · 0 评论 -
ReactiveCocoa 学习笔记八(RACBlockTrampoline)
RACBlockTrampolineRACBlockTrampoline 类是 ReactiveCocoa 框架中内部使用的类,用于调用动态的回调代码块。+ (id)invokeBlock:(id)block withArguments:(RACTuple *)arguments { NSCParameterAssert(block != NULL); RACBloc...原创 2018-09-16 17:38:46 · 249 阅读 · 0 评论 -
ReactiveCocoa 学习笔记九(RACDisposable)
RACDisposableRACDisposable 是 ReactiveCocoa 中十分常见的类,其封装了注销订阅者时所要做的工作。该类的方法十分简单,一个用来创建实例,封装要做的操作,一个执行操作。+ (instancetype)disposableWithBlock:(void (^)(void))block;- (void)dispose;在该类中,有一个实例变量 _dis...原创 2018-09-23 23:24:17 · 1204 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十(RACScheduler)
RACScheduler该类用来控制任务的执行,但其是一个抽象类,真正执行操作的是其子类。执行任务的权限,其实与队列权限相对应。typedef enum : long { RACSchedulerPriorityHigh = DISPATCH_QUEUE_PRIORITY_HIGH, RACSchedulerPriorityDefault = DISPATCH_QUEUE_PRIORIT...原创 2018-10-29 09:16:26 · 643 阅读 · 0 评论 -
ReactiveCocoa 学习笔记十二(RACEvent)
RACEventRACEvent 是 ReactiveCocoa 框架中用来表示信号流所发送的事件信息的类,同三种信号量相对应,该类可以分为三种。typedef NS_ENUM(NSUInteger, RACEventType) { RACEventTypeCompleted, RACEventTypeError, RACEventTypeNext};该类提供了三...原创 2018-10-31 09:37:00 · 290 阅读 · 0 评论 -
ReactiveCocoa 学习笔记二十四(ReactiveCocoa 中的宏)
ReactiveCocoa 中的宏RACAnnotations#ifndef RAC_WARN_UNUSED_RESULT#define RAC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))#endifRAC_WARN_UNUSED_RESULT 是在 ReactiveCocoa 框架内部声明方法时使用的宏,其旨在提示方法...原创 2018-12-09 14:17:25 · 452 阅读 · 1 评论