內(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)行操作,這是非常重要的一點