zoukankan      html  css  js  c++  java
  • 神奇的RAC宏

    先说说RAC中必须要知道的宏
    1. RAC(TARGET, [KEYPATH, [NIL_VALUE]]) 
     
    使用:
    RAC(self.outputLabel, text) = self.inputTextField.rac_textSignal; 
    RAC(self.outputLabel, text, @"收到nil时就显示我") = self.inputTextField.rac_textSignal; 
    

     这个宏是最常用的,RAC()总是出现在等号左边,等号右边是一个RACSignal,表示的意义是将一个对象的一个属性和一个signal绑定,signal每产生一个value(id类型),都会自动执行:

    1. [TARGET setValue:value ?: NIL_VALUE forKeyPath:KEYPATH]; 
     
    数字值会升级为NSNumber *,当setValue:forKeyPath时会自动降级成基本类型(int, float ,BOOL等),所以RAC绑定一个基本类型的值是没有问题的
    1. RACObserve(TARGET, KEYPATH) 
     
    作用是观察TARGET的KEYPATH属性,相当于KVO,产生一个RACSignal
     
    最常用的使用,和RAC宏绑定属性:
    RAC(self.outputLabel, text) = RACObserve(self.model, name); 
    
    上面的代码将label的输出和model的name属性绑定,实现联动,name但凡有变化都会使得label输出
    @weakify(Obj); 
    @strongify(Obj); 
    

     这对宏在 RACEXTScope.h 中定义,RACFramework好像没有默认引入,需要单独import

     
    他们的作用主要是在block内部管理对self的引用:
    @weakify(self); // 定义了一个__weak的self_weak_变量 
    [RACObserve(self, name) subscribeNext:^(NSString *name) { 
        @strongify(self); // 局域定义了一个__strong的self指针指向self_weak 
        self.outputLabel.text = name; 
    }]; 
    
    这个宏为什么这么吊,前面加@,其实就是一个啥都没干的@autoreleasepool {}前面的那个@,为了显眼罢了。
     
    这两个宏一定成对出现,先weak再strong
  • 相关阅读:
    mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
    对安卓逆向的认识
    js逆向答疑
    js-15:js逆向总结
    对js逆向的认识
    开发工具使用技巧-pycharm-mac
    ES6的新特性
    js-BOM操作
    js-DOM操作
    js-ECMAScript-6:自定义对象
  • 原文地址:https://www.cnblogs.com/lurenq/p/8465807.html
Copyright © 2011-2022 走看看