美文网首页
iOS RAC的实现原理2-RACDisposable

iOS RAC的实现原理2-RACDisposable

作者: Onlyoner | 来源:发表于2017-06-15 16:08 被阅读0次

RACDisposable

RACDisposable:它可以帮助我们取消订阅.

比如:信号发送完毕了 、或者信号发送失败了的时候都需要手动去取消订阅。

RACSubscriber(协议):订阅者(发送信号!)

看代码

#import "ViewController.h"
#import <ReactiveObjC/ReactiveObjC.h>

@interface ViewController ()
/** id<RACSubscriber>  */
@property (nonatomic,strong)  id<RACSubscriber> subscriber;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
     //1、创建一个信号
    RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        
        //3、发送信号
        //subscriber 发送
        [subscriber sendNext:@"发送信号"];
        
        _subscriber = subscriber;//可以用self.,强引用一下subscriber就不会走下边了,不强引用着subscriber 的话subscriber在发送完之后就没了就 自动取消订阅了
        
        //返回值的类型RACDisposable
        //RACDisposable可以帮助我们取消订阅:信号发送完毕或者失败了。(就像通知的注册和注销)
        return [RACDisposable disposableWithBlock:^{
            
            //清空资源
            
            NSLog(@"到这了");
            
        }];
        
    }];
    
    //2、订阅信号
    
   RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {
        
        //x就是信号发送的内容
        NSLog(@"订阅的信号是: %@",x);
        
    }];
    [disposable dispose];//手动 取消订阅
  
    
    //信号发送完毕了 默认就会取消订阅
    //只要订阅者在就不会主动取消订阅 如上边强引用着 subscriber 此时可以手动取消订阅
    
    
    
    
    
}

原理

subscriber 在信号发送完毕的时候会主动消失,
此时如果你再强引用一下它的话,
subscriber就不会消失,相当于信号没有发送完,就不会主动取消订阅了。

[signal subscribeNext:^(id  _Nullable x)  这个方法放入返回值`RACDisposable`类型的 这个类的对象可以帮助我们实现手动取消订阅:

RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {
        
        //x就是信号发送的内容
        NSLog(@"订阅的信号是: %@",x);
        
    }];
    [disposable dispose];//手动 取消订阅

相关文章

网友评论

      本文标题:iOS RAC的实现原理2-RACDisposable

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