block內(nèi)存管理和循環(huán)引用

block內(nèi)存管理

MRC: 在mrc中沒有strong和weak;用copy修飾block;因?yàn)閎lock剛剛聲明出來的時(shí)候(沒有引用外部的任何變量的時(shí)候是放在全局區(qū)global的),引用外部局部變量(包括_ _block修飾的局部變量)后放在棧區(qū),引用外部全局變量或是靜態(tài)變量后放在全局區(qū);

局部變量的對(duì)象(block生命在局部的話,就是局部變量對(duì)象)都是基本數(shù)據(jù)類型,都放在棧區(qū),代碼塊過后便會(huì)銷毀

需要用copy 修飾block 是將block放到堆區(qū)


ARC:用strong和copy一樣;剛剛聲明出來(沒有引用任何變量)也是放在全局區(qū),引用了外部的局部變量后放在堆區(qū),引用外部全局變量或是靜態(tài)變量后放在全局區(qū);

局部變量對(duì)象默認(rèn)有一個(gè)強(qiáng)指針引用著 ,放在堆區(qū)


block值傳遞和指針傳遞

ARC中block引用了局部變量后,block內(nèi)部是值傳遞,值已經(jīng)傳遞到了block內(nèi)部,block外部修改值,block內(nèi)部的值是不會(huì)變化的,再次調(diào)用也不會(huì)變化的

當(dāng)使用_ _block修飾、static變量,全局變量時(shí)候 是指針傳遞,修改的是內(nèi)存里面的值,是會(huì)改變的



block循環(huán)引用和提前釋放

block內(nèi)部需要使用_ _weak typeof(self) weakself = self;

如果里面有延時(shí)操作的話需要用_ _strong typeof(self) weakself = self;

因?yàn)閎lock會(huì)對(duì)內(nèi)部所有強(qiáng)指針變量進(jìn)行強(qiáng)引用一次,延時(shí)的話weakself會(huì)銷毀掉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容