小編今日給大家帶來RACDisopsable,大家可能有部分人對這個會感覺到很陌生,那么我就用一句話來表達就是他可以幫我們取消訂閱。那么又會有人會對這個產生疑問了,我們什么時候需要用到這個取消訂閱了打個實際的例子來說吧,今天我在餓了嗎App上面選擇了商品,快遞哥把商品運送到我手上,我不在需要這個商品,或者是我訂單有錯誤,我選擇取消訂閱商品,這樣我們就取消了(例子可能舉的不對,還望見諒)說的小編都有一點餓了,先點個餓了么
好了前面都是開一個玩笑,下面進入正題,就我們一起來看看代碼實際情況是如何取消訂閱
這里小編要提示 一下,在這個流程當中做了一點點小小的改動,請仔細觀看就能發現
原本之前要返回的nil,小編這邊讓它返回我們的RACDisopsable
還是熟悉的Block在這邊我們需要來創建這個取消訂閱,不是我們熟悉的alloc init,它幫我們都封裝好了,溫馨提示一下:封裝好的東西都會以名字開頭來命名的,所以我們要調用的是disposableViewBlock,那么有人又會問了,它什么時候會被調用了?下面請看代碼來驗證一下他什么時候被調用
代碼很清晰,結果顯然發現是信號發送完畢之后,我們發現它果然是在這里被調用了!估計又有同學要問了,它到底是怎么取消訂閱的呢?
原來取消的原因是因為上面的subscriber不在了,又有問題了:如何去證明呢?
小編在這里有一個想法是不斷引用subscriber,如果它一直存在的話,那么是不是取消訂閱呢在嘴上上還是紙上談兵,還是來點實際上代碼
看代碼上面subscriber成為了強引用,不過小編在這里問一下大家經過強引用之后的subscriber沒有被銷毀,我們還可以打印出Disposable嗎?看到這里是不是應該動動手指敲一敲代碼來驗證一下呢?小編這邊還是獻上代碼給大家驗證一下,希望給大家一點提示
代碼的結果證明subscriber依然是存在,所以沒有調用Disposable也沒有進行打印了到現在從這個實驗我們可以得出subscriber的存在跟取消訂閱之間的關系之外,我們還可以得出一個結論就是【信號發送完數據會認主取消訂閱】但是還是有問題,什么問題呢?這個是自動取消訂閱,假設我要手動取消訂閱該如何?
上述代碼所示可以看到subscribeNext 它是有個返回值RACSubscriber頻型,我們接下來拿到這個返回值
拿到了之后我們調用這個dispose方法。這樣就是一個手動取消訂閱了,我們來看看,如果它真的取消了,那我們就可以看到它會打印Disposable
到這里相信大家應該看明白了吧,如何手動或者自動的取消訂閱,但是在取消訂閱里面我們到底在做些什么呢?小編這邊要告訴大家,一般情況來說,取消訂閱的block里面【清空資源】取消訂閱的部分就要暫時先到這里了,希望對大家有所幫助,喜歡的朋友也可以點波收藏,點個贊,評論下小編的不足,小編也會加以改正寫出精品文章和大家共享一起學習,一起加油