小编今日给大家带来RACDisopsable,大家可能有部分人对这个会感觉到很陌生,那么我就用一句话来表达就是他可以帮我们取消订阅。那么又会有人会对这个产生疑问了,我们什么时候需要用到这个取消订阅了打个实际的例子来说吧,今天我在饿了吗App上面选择了商品,快递哥把商品运送到我手上,我不在需要这个商品,或者是我订单有错误,我选择取消订阅商品,这样我们就取消了(例子可能举的不对,还望见谅)说的小编都有一点饿了,先点个饿了么
好了前面都是开一个玩笑,下面进入正题,就我们一起来看看代码实际情况是如何取消订阅
这里小编要提示 一下,在这个流程当中做了一点点小小的改动,请仔细观看就能发现
原本之前要返回的nil,小编这边让它返回我们的RACDisopsable
还是熟悉的Block在这边我们需要来创建这个取消订阅,不是我们熟悉的alloc init,它帮我们都封装好了,温馨提示一下:封装好的东西都会以名字开头来命名的,所以我们要调用的是disposableViewBlock,那么有人又会问了,它什么时候会被调用了?下面请看代码来验证一下他什么时候被调用
代码很清晰,结果显然发现是信号发送完毕之后,我们发现它果然是在这里被调用了!估计又有同学要问了,它到底是怎么取消订阅的呢?
原来取消的原因是因为上面的subscriber不在了,又有问题了:如何去证明呢?
小编在这里有一个想法是不断引用subscriber,如果它一直存在的话,那么是不是取消订阅呢在嘴上上还是纸上谈兵,还是来点实际上代码
看代码上面subscriber成为了强引用,不过小编在这里问一下大家经过强引用之后的subscriber没有被销毁,我们还可以打印出Disposable吗?看到这里是不是应该动动手指敲一敲代码来验证一下呢?小编这边还是献上代码给大家验证一下,希望给大家一点提示
代码的结果证明subscriber依然是存在,所以没有调用Disposable也没有进行打印了到现在从这个实验我们可以得出subscriber的存在跟取消订阅之间的关系之外,我们还可以得出一个结论就是【信号发送完数据会认主取消订阅】但是还是有问题,什么问题呢?这个是自动取消订阅,假设我要手动取消订阅该如何?
上述代码所示可以看到subscribeNext 它是有个返回值RACSubscriber频型,我们接下来拿到这个返回值
拿到了之后我们调用这个dispose方法。这样就是一个手动取消订阅了,我们来看看,如果它真的取消了,那我们就可以看到它会打印Disposable
到这里相信大家应该看明白了吧,如何手动或者自动的取消订阅,但是在取消订阅里面我们到底在做些什么呢?小编这边要告诉大家,一般情况来说,取消订阅的block里面【清空资源】取消订阅的部分就要暂时先到这里了,希望对大家有所帮助,喜欢的朋友也可以点波收藏,点个赞,评论下小编的不足,小编也会加以改正写出精品文章和大家共享一起学习,一起加油