迴圈引用導致記憶體洩露 dealloc無法呼叫

2021-06-22 22:02:51 字數 714 閱讀 8733

在專案中,無意中把newswritecommentviewdelgate的屬性設定為了retain,導致迴圈引用,其他使用這個delegate的類引用計數出問題,然後在正常的使用alloc建立這個類物件和release釋放物件後無法呼叫類的dealloc函式,記憶體洩露是必然的。

然後,在push進newsdetailvc這個類之後,發現newsdetailvc的物件引用計數retaincount一下由1增加到5

- (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath

}

後面的ksafe_realse_nil(newdetailvc)是release並置物件指標為nil。這個導致的後果就是delloc不呼叫,記憶體不斷增加最後閃退。這個delegate正確的使用是把屬性設定為assign。

在block 的使用中,也容易出現迴圈引用,在block裡面,如果使用了self,比如[self function]; 也會造成迴圈引用,解決的方法是,比如__weak newswritecommentview * commentview=self;然後在block中,用commentview代替self,寫成[commentview function]; 這樣就避免了迴圈引用的出現,在正確的使用alloc和release後,會正確地呼叫dealloc()函式

參考:

迴圈retain導致記憶體洩露

dog.h import class person inte ce dog nsobject property nonatomic,retain person owner end person.h import class dog inte ce person nsobject property n...

Flex Fade效果導致記憶體洩露

因為這個問題,害我找了一晚上,乙個物件始終無法被釋放,崩潰了 最後在幾千行 裡逐一排查,終於找到了這個罪魁禍首 具體原因 通常我們給物件設定效果事件時如下 this.setstyle hideeffect o fadeout this.setstyle showeffect o fadein 當執行...

為什麼迴圈引用會導致「記憶體洩漏」

首先這個問題對於現代瀏覽器 ie9 來說已經不是問題了,這個問題其實是出現在ie8的時代了 我們主要是通過這個問題來介紹下瀏覽器的垃圾 機制 js是有自己的一套自動垃圾 機制的,這是大部分高階語言都具備的 除了c語言 然而它的機制是什麼呢?採用過的有2種 標記清除 和 引用計數 先明確一點現代瀏覽器...