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