Block中內(nèi)存泄露問題

內(nèi)存泄露不僅存在于MRC(MannulReference Counting)中,而且也存在于ARC(Automatic Reference Counting)也存在內(nèi)存泄露問題。

注意:Xcode 4.1及其以前版本沒有ARC

自從我們使用了ARC,代碼寫起來方便了很多,我們寫不需要retain,release,dealloc了,但是有些特殊情況我們需要寫dealloc方法,例如:當(dāng)我們使用 通知 ,KVO的時候我們需要在dealloc方法中移除觀察者,這時候我們不需要寫[super dealloc]。而在ARC中最常見的內(nèi)存泄露地方之一就是在Block中。

如果你不打印一下dealloc中的信息,也許你還真的不知道你的controller,view等等資源沒有釋放。很多問題都可能造成資源不能夠及時釋放。其中有一個很容易忽略的問題,block會自動retain你的變量。

如果你引用的是一個實例變量(如果你對實例變量不太清楚的可以看看:http://www.lxway.com/482926291.htm),它會直接對self進(jìn)行retain,這有時候有可能會產(chǎn)生一個引用環(huán)(兩個或以上的對象之間直接或間接地互相引用)并導(dǎo)致內(nèi)存泄露。解決的方法是:當(dāng)需要在Block中訪問實例變量的時候,創(chuàng)建一個指向self的指針,如果在MRC工程中對其使用__block修飾符,而在ARC工程中對其使用__weak修飾符,這樣self不會被自動retain:

通常來說,block都是一些簡短代碼片段的封裝,適用做工作單元,通常用來做并發(fā)任務(wù)、遍歷以及回調(diào)。

特別注意:

1、block需要注意的一個特性就是"Variable Capturing",直譯過來就是捕捉變量。

2、block會將“捕捉”到的變量復(fù)制一份,然后對復(fù)制品進(jìn)行操作,這是非常重要的一點

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

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

  • 內(nèi)存管理 簡述OC中內(nèi)存管理機(jī)制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,081評論 1 16
  • 為什么進(jìn)行內(nèi)存管理? 由于移動設(shè)備的內(nèi)存極其有限,所以每個APP所占的內(nèi)存也是有限制的,當(dāng)app所占用的內(nèi)存較多時...
    天天想念閱讀 979評論 1 6
  • Cocoa內(nèi)存管理機(jī)制 (1)當(dāng)你使用new、alloc、copy方法創(chuàng)建一個對象時,該對象的保留計數(shù)器值為1.當(dāng)...
    John_LS閱讀 2,866評論 0 6
  • Copyright ? 2017年ZaneWangWang. All rights reserved. 如果你看到...
    2897275c8a00閱讀 973評論 0 1
  • iOS內(nèi)存管理 概述 什么是內(nèi)存管理 應(yīng)用程序內(nèi)存管理是在程序運行時分配內(nèi)存(比如創(chuàng)建一個對象,會增加內(nèi)存占用)與...
    蚊香醬閱讀 5,815評論 8 119

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