一、引用計(jì)數(shù)器
1.整數(shù)拇派,4個(gè)字節(jié)荷辕,表示對象被利用的次數(shù)
2.創(chuàng)建一個(gè)新對象時(shí),新對象的引用計(jì)數(shù)器默認(rèn)為1
3.當(dāng)某個(gè)對象的引用計(jì)數(shù)器為0時(shí)件豌,所占內(nèi)存被系統(tǒng)回收
4.引用計(jì)數(shù)器的操作
retain +1
release -1
retainCount 獲得當(dāng)前引用計(jì)數(shù)器值
5.對象的銷毀
①引用計(jì)數(shù)器 0
②系統(tǒng)自動(dòng)發(fā)送dealloc給對象
③重寫dealloc方法
④一旦重寫了dealloc疮方,就必須調(diào)用[super dealloc],放在最后面調(diào)用
⑤一旦對象被回收了茧彤,它占用的內(nèi)存就不再可用骡显,堅(jiān)持使用會導(dǎo)致系統(tǒng)崩潰(也就是野指針錯(cuò)誤)
<p></p>
<p></p>
<p>
二、野指針和空指針
1.僵尸對象:對象被回收曾掂,僵尸對象不能復(fù)活惫谤,即不能復(fù)活,也就是不能再用 retain 了珠洗。如果這個(gè)指針還需要用溜歪,要么賦新值,要么給個(gè)nil
2.野指針:指向僵尸對象或者不可用內(nèi)存
3.空指針:null许蓖,nil蝴猪,0.在oc中不存在空指針錯(cuò)誤调衰,系統(tǒng)只會發(fā)出警告,不報(bào)錯(cuò)
注:如果給已經(jīng)釋放的對象發(fā)送一條消息拯腮,可能導(dǎo)致程序閃退
<p>
<p>
<p>
三窖式、set方法的內(nèi)存管理
1.內(nèi)存管理代碼規(guī)范
(1)只要調(diào)用了dealloc,必須有release
(2)set方法的代碼規(guī)范
①基本數(shù)據(jù)類型:直接復(fù)制
-(void)setAge:(int)age
{
_age = age;
}
②oc對象類型
-(void)setCar:(Car*)car
{
if(car!=_car) //先判斷是不是新傳遞進(jìn)來的對象
{
[_car release]; // 對舊對象做一次release
_car = [car retain]; //對新對象做一次retain
}
}
2.dealloc方法的代碼規(guī)范
(1)一定要[super dealloc],并且放到最后
(2)對self(當(dāng)前)所擁有的其他對象做一次release
-(void)dealloc
{
[_car release];
[super dealloc];
}
<p>
<p>
四动壤、property的內(nèi)存管理(代替oc對象的set方法萝喘,省略get方法)
@property(retain)Book*book;
相當(dāng)于省略了,
-(void)setBook:(Book*)book
{
if(_book!= book)
{
[_book release];
_book = [book retain];
}
}
<p>
五琼懊、參數(shù)分類
1.內(nèi)存管理相關(guān)參數(shù)
①retain:release舊值阁簸,retain新值(適用于oc對象類型)
②assign:直接賦值(默認(rèn)適用于非oc對象類型)
③copy:release舊值,copy新值
④strong:一般對象
2.是否要生成set方法
①readwrite:同時(shí)生成setter和getter的聲明哼丈,實(shí)現(xiàn)(默認(rèn))
②readonly:只會生成getter的聲明和實(shí)現(xiàn)
3.多線程管理
①nonatomic:性能高
②atomic:性能低(默認(rèn))
4.setter和getter方法的名稱(自定義)
setter:決定了set方法的名稱启妹,一定要有個(gè)冒號
getter:決定了get方法的名稱
<p>
六、autorelease的基本使用
1.返回值是id,即對象本身
2.將對象一個(gè)自動(dòng)釋放池醉旦,當(dāng)自動(dòng)釋放池(也是一個(gè)對象)被銷毀時(shí)饶米,會對池中所有對象做一次release操作,但是池子被銷毀车胡,對象不一定被銷毀
3.不再用擔(dān)心僵尸對象
4.創(chuàng)建的釋放池以棧的方式存儲檬输,即先進(jìn)后出
5.調(diào)用完autorelease后,對象的計(jì)數(shù)器不變
6.不用關(guān)心對象釋放時(shí)間
7一般對占用內(nèi)存較小的對象使用
<p>
七匈棘、ARC基本原理
1.ARC的特點(diǎn)
①不允許調(diào)用release丧慈、retain、retainCount
②允許重寫dealloc主卫,但是不允許[super dealloc]
③@property
☆strong:相當(dāng)于retain(oc對象類型逃默,強(qiáng)指針)
☆weak:相當(dāng)于assign(oc對象類型,弱指針)
☆assign:適用于非oc對象類型
2.ARC的判斷準(zhǔn)則:只要沒有強(qiáng)指針指向?qū)ο蟠亟粒蜁尫艑ο? 強(qiáng)指針:系統(tǒng)默認(rèn)都是完域。_strong
弱指針:_weak
posted @ 2015-05-30 20:32