美文网首页
RAC一些操作(取消,更新UI,cell去除脏数据)

RAC一些操作(取消,更新UI,cell去除脏数据)

作者: 韩叨叨 | 来源:发表于2017-12-27 10:58 被阅读34次

    在subscribe的三个方法中

    1. sendNext方法执行完毕继续进行sendNext;
    2. 再有错误信息时,执行error方法,执行完毕之后,进行执行disposableBlock;
    3. completed方法执行完毕之后,也进行执行disposableBlock;
    后面两个方法都是在执行之后,自动执行disposableBlock进行取消订阅。
    

    在执行disposableBlock块的时候,会执行RACDisposble的类方法disposableWithBlock。

    为什么会有这样的一个操作,是因为再取消订阅时,有一些后续操作,像回收内存,释放对象。比如打开文件,再取消之后,需要关闭;也可以类比Java中,try-catch这样的操作

    Disposable家族

    RACScopedDisposable ——绑定对象生存期
    RACSerialDisposable ——可替换的disposable包裹
    RACCompoundDisposable ——多个disposable的包裹

    要怎么更新UI呢?

    通常的做法是使用操作队列但是ReactiveCocoa有更简单的解决办法,在flattenMap:之后添加一个deliverOn:操作就可以转到主线程上了。
    注:如果你看一下RACScheduler类,就能发现还有很多选项,比如不同的线程优先级,或者在管道中添加延迟。

    cell重用是内容重叠解决方案:

    cell是重用的,可能有脏数据,所以上面的代码首先重置图片。然后创建signal来获取图片数据。你之前也遇到过deliverOn:这一步,它会把next事件发送到主线程,这样subscribeNext:block就能安全执行了。
    cell.rac_prepareForReuseSignal:Cell复用时的清理。
    takeUntil:当给定的signal完成前一直取值

    相关文章

      网友评论

          本文标题:RAC一些操作(取消,更新UI,cell去除脏数据)

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