一、管理對(duì)象:
在iOS的開(kāi)發(fā)過(guò)程中晤揣,內(nèi)存中的對(duì)象分為兩類:基本數(shù)據(jù)類型、對(duì)象類型默勾。
1.基本數(shù)據(jù)類型
比如int碉渡、float、double等基本數(shù)據(jù)類型的內(nèi)存不需要我們來(lái)管理母剥。這種類型在程序運(yùn)行中會(huì)被放入棧中滞诺,它們依次緊密排列,在內(nèi)存中占有一塊連續(xù)的內(nèi)存空間环疼,遵循“先進(jìn)后出”原則习霹。
2.對(duì)象類型
繼承于NSObject類的所有OC對(duì)象,都屬于引用類型炫隶。這種類型在運(yùn)行中被放入堆中淋叶,給對(duì)象分配內(nèi)存空間時(shí),會(huì)隨機(jī)的從內(nèi)存中開(kāi)辟空間伪阶,對(duì)象與對(duì)象之間可能會(huì)留有不確定大小的空白空間煞檩,因此會(huì)產(chǎn)生很多內(nèi)存的碎片,這種就需要我們開(kāi)發(fā)者來(lái)管理栅贴。
總結(jié):在性能上斟湃,棧內(nèi)存要優(yōu)于堆內(nèi)存,這是因?yàn)闂W裱冗M(jìn)后出的原則檐薯,但是當(dāng)數(shù)據(jù)量過(guò)大時(shí)凝赛,存入棧會(huì)明顯的降低性能,這時(shí)我們會(huì)把大量的數(shù)據(jù)放入堆中坛缕,然后在棧中存放堆的地址墓猎。當(dāng)需要調(diào)用數(shù)據(jù)時(shí),就可以快速的通過(guò)棧內(nèi)的地址找到堆中的數(shù)據(jù)赚楚。
二毙沾、管理方式
在iOS的開(kāi)發(fā)過(guò)程中,每個(gè)OC對(duì)象內(nèi)部都專門(mén)有四個(gè)字節(jié)來(lái)存儲(chǔ)引用計(jì)數(shù)器直晨,它是一個(gè)整數(shù)搀军,表示對(duì)象被引用的次數(shù),通過(guò)它可以判斷對(duì)象是否被回收勇皇。Objective-C提供了兩種內(nèi)存管理機(jī)制:MRC(Mannul Reference Counting)和ARC(Automatic Reference Counting)罩句。
1.MRC(Mannul Reference Counting)手動(dòng)管理內(nèi)存
在iOS5.0以前,所有的對(duì)象都需要手動(dòng)的添加retain敛摘、release來(lái)管理內(nèi)存门烂,遵循誰(shuí)創(chuàng)建誰(shuí)回收的原則,對(duì)引用計(jì)數(shù)器的操作全由程序員親自完成。誰(shuí)創(chuàng)建”alloc","new",誰(shuí)"release";誰(shuí)”retain",誰(shuí)"release";retain的次數(shù)要和release次數(shù)相匹配屯远。
retain:該方法的作用是將內(nèi)存數(shù)據(jù)的所有權(quán)附給另一指針變量蔓姚,引用數(shù)加1,即retainCount+ 1; release:該方法是釋放指針變量對(duì)內(nèi)存數(shù)據(jù)的所有權(quán)慨丐,引用數(shù)減1坡脐,即retainCount- 1; autorelease:該方法是將該對(duì)象內(nèi)存的管理放到autoreleasepool中。
注意:永遠(yuǎn)不要手動(dòng)調(diào)用對(duì)象的dealloc方法,而是讓系統(tǒng)自動(dòng)調(diào)用
2.ARC(Automatic Reference Counting)自動(dòng)管理內(nèi)存
ARC是iOS 5推出的新功能房揭,全稱叫 ARC(Automatic Reference Counting)备闲。簡(jiǎn)單地說(shuō),就是代碼中自動(dòng)加入了retain/release捅暴,原先需要手動(dòng)添加的用來(lái)處理內(nèi)存管理的引用計(jì)數(shù)的代碼可以自動(dòng)地由編譯器完成了恬砂。
該機(jī)能在 iOS 5/ Mac OS X 10.7 開(kāi)始導(dǎo)入,利用 Xcode4.2 可以使用該機(jī)能蓬痒。簡(jiǎn)單地理解ARC泻骤,就是通過(guò)指定的語(yǔ)法,讓編譯器(LLVM 3.0)在編譯代碼時(shí)梧奢,自動(dòng)生成實(shí)例的引用計(jì)數(shù)管理部分代碼狱掂。有一點(diǎn),ARC并不是GC亲轨,它只是一種代碼靜態(tài)分析(Static Analyzer)工具符欠。
ARC 的規(guī)則非常簡(jiǎn)單:只要還有一個(gè)強(qiáng)指針變量指向?qū)ο螅瑢?duì)象就會(huì)保持在內(nèi)存中瓶埋。默認(rèn)所有實(shí)例變量和局部變量都是Strong指針;弱指針指向的對(duì)象被回收后诊沪,弱指針會(huì)自動(dòng)變?yōu)閚il指針养筒,不會(huì)引發(fā)野指針錯(cuò)誤。
注意:
(1)不能調(diào)用release端姚、retain晕粪、autorelease、retainCount
(2)可以重寫(xiě)dealloc渐裸,但是不能調(diào)用[super dealloc]
(3)@property : 想長(zhǎng)期擁有某個(gè)對(duì)象巫湘,應(yīng)該用strong,其他對(duì)象用weak
(4)其他基本數(shù)據(jù)類型依然用assign
(5)兩端互相引用時(shí)昏鹃,一端用strong尚氛、一端用weak