內(nèi)存泄露不僅存在于MRC(MannulReference Counting)中咒精,而且也存在于ARC(Automatic Reference Counting)也存在內(nèi)存泄露問題厢破。
注意:Xcode 4.1及其以前版本沒有ARC
自從我們使用了ARC粉楚,代碼寫起來方便了很多咒劲,我們寫不需要retain,release,dealloc了蜕提,但是有些特殊情況我們需要寫dealloc方法离陶,例如:當(dāng)我們使用 通知 纷宇,KVO的時(shí)候我們需要在dealloc方法中移除觀察者孔飒,這時(shí)候我們不需要寫[super dealloc]寄悯。而在ARC中最常見的內(nèi)存泄露地方之一就是在Block中萤衰。
如果你不打印一下dealloc中的信息,也許你還真的不知道你的controller,view等等資源沒有釋放猜旬。很多問題都可能造成資源不能夠及時(shí)釋放脆栋。其中有一個(gè)很容易忽略的問題,block會自動retain你的變量洒擦。
如果你引用的是一個(gè)實(shí)例變量(如果你對實(shí)例變量不太清楚的可以看看:http://www.lxway.com/482926291.htm)椿争,它會直接對self進(jìn)行retain,這有時(shí)候有可能會產(chǎn)生一個(gè)引用環(huán)(兩個(gè)或以上的對象之間直接或間接地互相引用)并導(dǎo)致內(nèi)存泄露熟嫩。解決的方法是:當(dāng)需要在Block中訪問實(shí)例變量的時(shí)候秦踪,創(chuàng)建一個(gè)指向self的指針,如果在MRC工程中對其使用__block修飾符,而在ARC工程中對其使用__weak修飾符椅邓,這樣self不會被自動retain:
通常來說柠逞,block都是一些簡短代碼片段的封裝,適用做工作單元景馁,通常用來做并發(fā)任務(wù)板壮、遍歷以及回調(diào)。
特別注意:
1合住、block需要注意的一個(gè)特性就是"Variable Capturing"绰精,直譯過來就是捕捉變量。
2透葛、block會將“捕捉”到的變量復(fù)制一份笨使,然后對復(fù)制品進(jìn)行操作,這是非常重要的一點(diǎn)