Objective C - 內(nèi)存管理

一、管理對(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市洞渤,隨后出現(xiàn)的幾起案子阅嘶,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯柔,死亡現(xiàn)場(chǎng)離奇詭異抡蛙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)魂迄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)粗截,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捣炬,你說(shuō)我怎么就攤上這事熊昌。” “怎么了遥金?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵浴捆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我稿械,道長(zhǎng)选泻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任美莫,我火速辦了婚禮页眯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厢呵。我一直安慰自己窝撵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布襟铭。 她就那樣靜靜地躺著碌奉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寒砖。 梳的紋絲不亂的頭發(fā)上赐劣,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音哩都,去河邊找鬼魁兼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漠嵌,可吹牛的內(nèi)容都是我干的咐汞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼儒鹿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼化撕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挺身,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤侯谁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體墙贱,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡热芹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惨撇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伊脓。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魁衙,靈堂內(nèi)的尸體忽然破棺而出报腔,到底是詐尸還是另有隱情,我是刑警寧澤剖淀,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布纯蛾,位于F島的核電站,受9級(jí)特大地震影響纵隔,放射性物質(zhì)發(fā)生泄漏翻诉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一捌刮、第九天 我趴在偏房一處隱蔽的房頂上張望碰煌。 院中可真熱鬧,春花似錦绅作、人聲如沸芦圾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)个少。三九已至,卻和暖如春眯杏,著一層夾襖步出監(jiān)牢的瞬間稍算,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工役拴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钾埂。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓河闰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親褥紫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姜性,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容