美文网首页
15.ReactiveCocoa

15.ReactiveCocoa

作者: 阳明先生x | 来源:发表于2018-04-30 20:41 被阅读28次

    ReactiveCocoa简介

    image

    ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾。

    image.png

    响应式编程思想
    响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。

    代表:KVO

    学习 RAC 我们首先要了解 RAC 都有哪些类
    RACSignal
    RACSubject
    RACSequence
    RACMulticastConnection
    RACCommand

    导入ReactiveCocoa


    ReactiveCocoa的GitHub地址
    Objective-C
    ReactiveCocoa 2.5版本以后改用了Swift,所以Objective-C项目需要导入2.5版本

    CocoaPods集成:

    platform :ios, '8.0'

    target 'YouProjectName' do

    use_frameworks!
    pod 'ReactiveCocoa', '~> 2.5'

    end
    PS:新版本的CocoaPods需要加入

    target 'YouProjectName' do
    ...
    end

    ReactiveCocoa常见类
    RACSiganl 信号类
    信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据。

    注意:

    信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。
    默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。
    如何订阅信号:调用信号RACSignal的subscribeNext就能订阅
    使用:

    // RACSignal使用步骤:
    // 1.创建信号 + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
    // 2.订阅信号,才会激活信号. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
    // 3.发送信号 - (void)sendNext:(id)value

    // RACSignal底层实现:
    // 1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
    // 2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
    // 2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。
    // 2.1 subscribeNext内部会调用siganl的didSubscribe
    // 3.siganl的didSubscribe中调用[subscriber sendNext:@1];
    // 3.1 sendNext底层其实就是执行subscriber的nextBlock
    
    // 1.创建信号
    RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
    
        // block调用时刻:每当有订阅者订阅信号,就会调用block。
    
        // 2.发送信号
        [subscriber sendNext:@1];
    
        // 如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposable disposable]取消订阅信号。
        [subscriber sendCompleted];
    
        return [RACDisposable disposableWithBlock:^{
    
            // block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号。
    
            // 执行完Block后,当前信号就不在被订阅了。
    
            NSLog(@"信号被销毁");
    
        }];
    }];
    
    // 3.订阅信号,才会激活信号.
    [siganl subscribeNext:^(id x) {
        // block调用时刻:每当有信号发出数据,就会调用block.
        NSLog(@"接收到数据:%@",x);
    }];
    

    https://blog.csdn.net/wzc10101415/article/details/55051339

    https://www.cnblogs.com/ningmengcao-ios/p/6803878.html

    最快让你上手ReactiveCocoa之基础篇

    最快让你上手ReactiveCocoa之进阶篇

    相关文章

      网友评论

          本文标题:15.ReactiveCocoa

          本文链接:https://www.haomeiwen.com/subject/dtjtrftx.html