Block的循环引用详解
1.首先我們創(chuàng)建了一個網(wǎng)絡(luò)請求工具類
?
?
然后storyboard里面去創(chuàng)建了一個導(dǎo)航控制器 并且把它設(shè)置為初始控制器 ? 然后拖入一個bar button ?--show--到自帶的控制器
?
?這個時候運行代碼的結(jié)果是
?
?
?
x
?
顯然這個時候沒有造成循環(huán)引用 ??
為什么呢??????????????????
?
//沒有self的時候是沒有循環(huán)引用的
?
//tools是一個局部的變量 執(zhí)行完了就會被釋放掉了
?
//這個時候出現(xiàn)了self沒有出現(xiàn)循環(huán)引用? 控制器也被釋放了
?
//block是右邊的finished? finished 對這個self.view進行強引用? finished執(zhí)行完畢了然后就釋放掉了 ? 會解除對self的強引用? 并不會對self產(chǎn)生循環(huán)引用
?
?
例子2:
如果這個時候我們對控制器里面的那個networktools 中的tools對象來一個strong的強引用而不是copy的話
?
?這個時候的結(jié)果還是和之前是一樣的為什么???
控制器對self的解除引用是在finished執(zhí)行完畢的時候
對這個tools的強引用沒有關(guān)系 ?
?
?
例子3:
block是一組準備好的代碼 ? 在需要的時候執(zhí)行 ?可以當(dāng)作參數(shù)傳遞 ?
在異步的方法中能夠執(zhí)行block 的話就直接執(zhí)行 ? 如果當(dāng)前方法不能直接執(zhí)行block 通常需要定義一個屬性 ? 記錄block 在需要的時候執(zhí)行
上圖了:
?
這個時候期待的循環(huán)引用就出現(xiàn)了
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Ninesday/p/5644954.html
總結(jié)
以上是生活随笔為你收集整理的Block的循环引用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【谷歌市场安装】Google Play
- 下一篇: 基于RBGD的mapping