zoukankan      html  css  js  c++  java
  • RAC的坑

    http://www.cocoachina.com/industry/20140609/8737.html

    1.对数组的观察

    有了这些Category,大部分的Delegate都可以使用RAC来做。或许你会想,可不可以subscribe NSMutableArray.rac_sequence.signal,这样每次有新的object或旧的object被移除时都能知道,UITableViewController就可以根据dataSource的变化,来reloadData。但很可惜这样不行,因为RAC是基于KVO的,而NSMutableArray并不会在调用addObject或removeObject时发送通知,所以不可行。不过可以使用NSArray作为UITableView的dataSource,只要dataSource有变动就换成新的Array,这样就可以了。

    2.Cell复用时的清理

    说到UITableView,再说一下UITableViewCell,RAC给UITableViewCell提供了一个方法:rac_prepareForReuseSignal,它的作用是当Cell即将要被重用时,告诉Cell。想象Cell上有多个button,Cell在初始化时给每个button都addTarget:action:forControlEvents,被重用时需要先移除这些target,下面这段代码就可以很方便地解决这个问题:

    [[[self.cancelButton
        rac_signalForControlEvents:UIControlEventTouchUpInside]
        takeUntil:self.rac_prepareForReuseSignal]
        subscribeNext:^(UIButton *x) {
        // do other things
    }];

    3.RACCommand自动绑定

    button.rac_command = [[RACCommand alloc]initWithEnable:xxx signalBlock:xxx];

    button的enabled自动与command的enabled绑定,无需另外声明。

    4.combineLatest触发时机

    combineLatest后面跟的信号集合中,每个信号都有值之后就会第一次触发,之后,任意一个信号有了新值就会触发。

    rac_liftSelector:withSignals 也是类似,它的意思是当signalA和signalB都至少sendNext过一次,接下来只要其中任意一个signal有了新的内容,相应方法就会自动被触发。

    5.RACObserve自动sendNext

    使用RACObserve观察属性时,会立即将属性当前值sendNext.

    6.rac_willDeallocSignal不会sendNext,只会sendComplete

    7.实践建议

    当一个signal被一个subscriber subscribe后,这个subscriber何时会被移除?答案是当subscriber被sendComplete或sendError时,或者手动调用[disposable dispose]。

    当subscriber被dispose后,所有该subscriber相关的工作都会被停止或取消,如http请求,资源也会被释放。

    Signal events是线性的,不会出现并发的情况,除非显示地指定Scheduler。所以-subscribeNext:error:completed:里的block不需要锁定或者synchronized等操作,其他的events会依次排队,直到block处理完成。

    Errors有优先权,如果有多个signals被同时监听,只要其中一个signal sendError,那么error就会立刻被传送给subscriber,并导致signals终止执行。相当于Exception。

    生成Signal时,最好指定Name, -setNameWithFormat: 方便调试。

    block代码中不要阻塞。

     

  • 相关阅读:
    配置虚拟主机并更改Apache默认解析路径
    在ListView中实现排序
    petshop4.0 具体解释之中的一个(系统架构设计)
    学习笔记之TCP/IP协议分层与OSI參考模型
    cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法
    cmake 学习笔记(一)
    标准差(standard deviation)和标准误差(standard error)你能解释清楚吗?
    Web.xml配置具体解释之context-param
    福克斯:悲观?乐观?就看你与世界怎么互动
    Android 服务类Service 的具体学习
  • 原文地址:https://www.cnblogs.com/guoxiaoqian/p/4691035.html
Copyright © 2011-2022 走看看