美文网首页
RAC用法笔记(一)

RAC用法笔记(一)

作者: handsome5 | 来源:发表于2018-05-14 18:09 被阅读28次

RAC

RAC 全称ReactiveCocoa, 一个超级重量的第三方框架,接管了苹果的所有事件机制,RAC主要是监听事件,并能立即作出响应,即响应式编程.

RAC.png
RAC信号三部曲
  • 1)创建信号
    RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { NSLog(@"test Project"); return nil; }];
  • 2)订阅信号
    [signal subscribeNext:^(id _Nullable x) { //x 信号的内容 NSLog(@"%@",x); }];
  • 3)发送信号
    [subscriber sendNext:@"this is test"];
    注意 [subscriber sendNext:@"this is test"];放在创建信号里,在创建信号里有个block参数subscriber(订阅者),接受到订阅信号源时,才能发送信号,订阅信号也能通过block接受发送信号的内容.
  • 合并写法
    [[RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { //发送信号 [subscriber sendNext:@"This is RAC"]; return nil; }] subscribeNext:^(id _Nullable x) { NSLog(@"x"); }] ;

RAC的使用

  • UIButton监听
 [[self.btn rac_signalForControlEvents:(UIControlEventTouchUpInside)]subscribeNext:^(__kindof UIControl * _Nullable x) {
        NSLog(@"%@",x);
    }];
  • UITextFeild监听
   @weakify(self);
    [[self.testTextFileld rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
        NSLog(@"%@",x);
    @strongify(self);
        self.testTextFileld.text = @"Hello";
    }];
  • UITextFeild(多个UITextField)监听
[[RACSignal combineLatest:@[nameTextField.rac_textSignal, pwdTextField.rac_textSignal] reduce:^id _Nullable(NSString * name, NSString * pwd){
       NSLog(@"%@ ,%@", name,pwd);
       return @(name.length > 0 && pwd.length > 0);
       return nil;
   }] subscribeNext:^(id  _Nullable x) {
       NSLog(@"%@",x);
       
       _demoButton.enabled = [x boolValue];
   }];
  • RAC通知 (不需要手动remove)
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
        NSLog(@"%@",x);
    }];
  • KVO (监听属性变化一)
@property(noatomic,assign) int age; 
[[self rac_valueForKeyPath:@"age" observer:nil] subscribeNext:^(id x ){ NSLog(@"%@",x); }]; 
//模拟一个事件 触摸屏幕 就让age自增
 -(void)touchesBegin:(NSSet<UITouch*>*)touches WithEvent:(UIEvent*)event{   
   age++; 
}
  • KVO (快速监听某个对象的某个属性改变)
如:监听当前视图控制器中心点的变化
[RACObserver (self.view,center) subscribeNext:^(id x){

}];
  • 元组
RACTuple*tuple = RACTuplePack(@1,@3); NSLog(@"%@",tuple); 
//快速解析元组
 RACTupleUnPack(NSNumber*num1,NSNumber*num2) = tuple; 
//宏的参数表示你需要把这个元组解析成什么类型的数据

....

RAC的好处太多,一旦使用之后就很难丢弃了,但是RAC里面还是有很多坑的,RAC最大的坑就是循环引用,RAC采用 @weakify @strongify 两个宏来处理循环引用

  • RAC @weakify (打破循环引用)
  // UITextFeild 监听的 preprocess
    @autoreleasepool {} __attribute__((objc_ownership(weak))) __typeof__(self) self_weak_ = (self);;

  • RAC @strongify(self)
  // UITextFeild 监听的 preprocess
 __attribute__((objc_ownership(strong))) __typeof__(self) self = self_weak_;
  • 思考?
   @weakify(self);
    [[self.testTextFileld rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
        NSLog(@"%@",x);
    @strongify(self);
        self.testTextFileld.text = @"Hello";
    }];
上面code循环引用在哪里?
__weak typeof(self)weakSelf = self;和 @weakify 有什么区别呢?

案例地址

相关文章

  • RAC用法笔记(一)

    RAC RAC 全称ReactiveCocoa, 一个超级重量的第三方框架,接管了苹果的所有事件机制,RAC主要是...

  • 记录ReactiveObjC的一些用法

    常见用法 rac_signalForSelector : 代替代理 rac_valuesAndChangesFor...

  • RAC

    ReactiveCocoa入门 学习RAC小记-适合给新手看的RAC用法总结RAC稍深入-适合新手学习RAC iO...

  • RAC常见用法(二)

    接着说RAC的常见用法 : 这是今天要说的几个常见用法: rac_liftSelector 当多个信号都被发送时,...

  • RAC(iOS)常用方法

    前言 在学完RAC后发现方法的用法总是会忘,于是简单记录一下在工程中的用法。 RAC常用方法 UIButton点击...

  • RAC一些常见用法(五)

    本demo详见github 1.常见的用法 2.RAC常见的宏 3.发送验证码 友情链接: RAC(一) RAC(...

  • RAC(ReactiveCocoa)介绍(二)——map映射

    上一篇简单介绍了一下RAC,这次探究RAC中的map映射用法。 Map(映射)RAC中包含两种映射方法map、fl...

  • RAC常见用法(一)

    上次体验了一把RAC, 今天, 再介绍一下RAC的简单用法: 首先看一下打算介绍的知识点: 然后, 就开始One ...

  • RAC基本用法

    最近公司要用MVVM+RAC重构项目,所以就对RAC开发中的基本用法总结了一下。 RACSignal RACSig...

  • RAC常见用法(三)

    本文将要介绍的RAC的常见用法大纲: RAC的映射: 首先看flattenMap:这个方法, 其实这个方法的内部是...

网友评论

      本文标题:RAC用法笔记(一)

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