一,內(nèi)存管理類型定義
1,基本類型 任何C的類型,eg:
int,short,char,long,long long,struct,enum,union等屬于基本類型或結(jié)構(gòu)體
內(nèi)存管理對于C語言的基本類型無效
2,OC類型(非基本類型)
任何繼承于NSObject類的對象都屬于OC類型
也就是除了C之外的其他類型
二,OC對象結(jié)構(gòu)
所有OC對象都有著一個計數(shù)器,保留著當(dāng)前對象被引用的數(shù)量,如果計數(shù)器為0,那么就真正的釋放這個對象。
三,alloc retain release 函數(shù)
1, alloc函數(shù)是創(chuàng)建對象使用,創(chuàng)建完成后計數(shù)器為1(只用一次)
retain是對一個對象的計數(shù)器+1 (可以多次調(diào)用)
release是對一個對象計數(shù)器-1(減到0 對象就會從內(nèi)存中釋放)
2,oc類中實現(xiàn)了引用計數(shù)器,對象知道當(dāng)前被引用的次數(shù)。
如果需要引用對象,可以給對象發(fā)送一個retain消息,這樣對象計數(shù)器就+1;
當(dāng)不需要引用對象了,可以給對象發(fā)送release消息,這樣對象計數(shù)器就-1;
當(dāng)計數(shù)器減到0,自動調(diào)用對象的dealloc函數(shù),對象就會釋放內(nèi)存;
計數(shù)器為0的對象不能再使用release和其他方法。
四,自動釋放池
自動釋放池是OC的一種內(nèi)存自動回收機制,可以將一些臨時變量通過自動釋放池來統(tǒng)一回收釋放。
當(dāng)自動釋放池本身銷毀的時候,池子里面所有的對象都會做一次release操作。
任何OC對象只要調(diào)用autorelease方法,就會把該對象放到離自己最近的自動釋放池中(棧頂?shù)尼尫懦兀?
五,不是用alloc,retain,copy創(chuàng)建的對象,不能使用release釋放。
新聞熱點
疑難解答