RAC-宏

作者: lionsom_lin | 来源:发表于2017-05-05 18:27 被阅读44次

    一、概要

    • RAC :给某个对象绑定一个属性
    • RACObserve :监听某个对象的某个属性
    • RACTuplePack :将数据打包成RACTuple
    • RACTupleUnpack : 将ARC元祖解包成对象的数据

    二、具体实现

    1、宏-RAC

    -(void)demo_RAC {
        //方法一:
        //监听文本框
        // * 文本信号 *
    //    [_textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
    //        NSLog(@"EEEEE == %@",x);
    //    }];
        
        
        //方法二: 宏
        //给某个对象的某个属性绑定信号,一旦信号产生数据,就会将内容赋值给属性!!
        RAC(_showLabel,text) = _textField.rac_textSignal;
    }
    

    2、RACObserve

    可代替KVO

    -(void)demo_RACObserve {
        //只要这个对象的属性发生改变,我就发送信号!!!
        //在这里就是 只要label的text文本发生变化,我就发送文本信号
        [RACObserve(self.showLabel, text) subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
        
    //配合上面的操作
        //给某个对象的某个属性绑定信号,一旦信号产生数据,就会将内容赋值给属性!!
        RAC(_showLabel,text) = _textField.rac_textSignal;
    }
    

    3、weakify、strongify

    案例:Block循环引用

        RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            NSLog(@"%@",self);
            return nil;
        }];
    
        [signal subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
        
    //添加强引用
        _mysignal = signal;
    

    解决方案:weakify、strongify 两个必须连着一起用

        @weakify(self);
        RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            @strongify(self);
            NSLog(@"%@",self);
            
            return nil;
        }];
    
        [signal subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
    //添加强引用  
        _mysignal = signal;
    

    检测是否循环引用

    -(void)dealloc {
        NSLog(@"哥们走了");
    }
    

    4、RACTuplePack、RACTupleUnpack

    -(void)demo_RACPack {
        //包装元祖
        RACTuple *tuple = RACTuplePack(@"abc", @"efg");
        
        //解包元祖
        RACTupleUnpack(NSString *string1,NSString *string2) = tuple;
        NSLog(@"%@---%@",string1,string2);
    }
    

    相关文章

      网友评论

          本文标题:RAC-宏

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