iOS | 內存管理

如何使用內存以及如何分配內存對于設備和用戶體驗至關重要纠永。OC語言作為C語言的超集鬓长,對于內存以及內存管理方面非常重要。從Xcode 4.2之后蘋果公司采用了ARC編譯器特性的內存管理機制尝江,大大的減少了程序員手動對內存的管理痢士。

OC的內存管理一般是對OC對象進行管理,包括任何繼承了NSObject的對象茂装,因為OC對象是存放于堆中怠蹂,而非OC對象一般放在棧里面,會被系統(tǒng)自動回收少态。

MRC

1.引用計數(shù)器
(1)引用計數(shù)器表示有多少人正在使用這個對象城侧。
(2)當沒有任何人使用這個對象時, 系統(tǒng)才會回收這個對象, 也就是說當對象的引用計數(shù)器為0時,對象 占用的內存就會被系統(tǒng)回收。
(3)如果對象的計數(shù)器不為0彼妻,那么在整個程序運行過程嫌佑,它占用的內存就不可能被回收(除非整個程序 已經退出 )
(4)任何一個對象, 剛生下來的時候, 引用計數(shù)器都為1
(5)當使用alloc、new或者copy(MutableCopy)創(chuàng)建一個對象時侨歉,對象的引用計數(shù)器默認就是1
2.引用計數(shù)器的操作
(1)給對象發(fā)送一條retain消息,可以使引用計數(shù)器值+1(retain方法返回對象本身)
(2)給對象發(fā)送一條release消息, 可以使引用計數(shù)器值-1
(3)給對象發(fā)送retainCount消息, 可以獲得當前的引用計數(shù)器值(retainCount有時候會不準確屋摇, 建議采用delloc方法來驗證是否完全內存釋放)
注意: release并不代表銷毀\回收對象, 僅僅是計數(shù)器-1
3.dealloc方法
(1)當一個對象的引用計數(shù)器值為0時,這個對象即將被銷毀,其占用的內存被系統(tǒng)回收幽邓。
(2)對象即將被銷毀時系統(tǒng)會自動給對象發(fā)送一條dealloc消息 (因此, 從dealloc方法有沒有被調 用,就可以判斷出對象是否被銷毀)
dealloc方法的重寫 一般會重寫dealloc方法,在這里釋放相關資源,dealloc就是對象的遺言

總之就是
(1)誰創(chuàng)建誰release :
如果你通過alloc炮温、new或[mutable]copy來創(chuàng)建一個對象,那么你必須調用release或 autorelease
誰retain誰release: (2)只要你調用了retain牵舵,就必須調用一次release

ARC

自動引用計數(shù)柒啤,解決了iOS開發(fā)者的內存管理的麻煩。
1.ARC機制判斷注意點及優(yōu)點 ARC機制判斷畸颅,ARC機制下有幾個明顯的標志: 不允許調用對象的release方法 再重寫父類的dealloc方法時,不能再調用 [super dealloc];
優(yōu)點
ARC是編譯器特性担巩,而不是運行時特性 ARC不是其它語言中的垃圾回收,有著本質區(qū)別,ARC完全消除了手動管理內存的煩瑣没炒,基本上能夠避免內存泄露有時還能更加快速涛癌,因為編譯器還可以執(zhí)行某些優(yōu)化。

2.強指針,弱指針
強指針
默認所有指針變量都是強指針 被__strong修飾的指針
弱指針
被__weak修飾的指針

3.ARC下單對象內存管理 (1)局部變量釋放對象隨之被釋放 (2)清空指針對象隨之被釋放 (3)默認清空所有指針都是強指針 弱指針需要明確說明 拳话。注意: 千萬不要使用弱指針保存新創(chuàng)建的對象先匪。

4.ARC下循環(huán)引用問題
與MRC一樣,當兩個對象相互引用時假颇,會出現(xiàn)內存泄露的問題,解決辦法是:一個用strong一個用 weak骨稿。

5.ARC下@property參數(shù)
strong: 用于OC對象, 相當于MRC中的retain
weak: 用于OC對象, 相當于MRC中的assign
assign: 用于基本數(shù)據類型, 跟MRC中的assign一樣(默認值)

另外概念

1.堆棧笨鸡,其中棧是由系統(tǒng)自動分配釋放,存放函數(shù)的參數(shù)值坦冠,局部變量等形耗;而堆是由程序員釋放,若程序員不釋放辙浑,程序結束時可能由系統(tǒng)回收激涤。
2.僵尸對象
已經被銷毀的對象(不能再使用的對象)
3.野指針
指向僵尸對象(不可用內存)的指針 給野指針發(fā)消息會報EXC_BAD_ACCESS錯誤
4.空指針
沒有指向存儲空間的指針(里面存的是nil, 也就是0) 給空指針發(fā)消息是沒有任何反應的 為了避免野指針錯誤的常?辦法
在對象被銷毀之后, 將指向對象的指針變?yōu)榭罩羔?br> 5.@property參數(shù)
(1)控制set方法的內存管理
retain : release舊值,retain新值(用于OC對象)
assign : 直接賦值判呕,不做任何內存管理(默認倦踢,用于非OC對象類型) copy : release舊值,copy新值(一般用于NSString *)
(2)控制需不需要生成set方法
readwrite :同時生成set方法和get方法(默認)
readonly :只會生成get方法
(3)多線程管理
atomic :性能低(默認)
nonatomic :性能高(iOS開發(fā)中都用這個屬性)
(4)控制set方法和get方法的名稱
setter : 設置set方法的名稱侠草,一定有個冒號:
getter : 設置get方法的名稱 若有bool類型時最好修改getter方法為:(getter = isXXX) 注意: 不同類型的參數(shù)可以組合在一起使用
(5)循環(huán)引用 當使用@property屬性聲明兩個對象時辱挥,如果同時使用retain,會到時相互引用边涕,內存不會釋放晤碘,解決辦法是,一個用retain功蜓,一個用assign园爷。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市式撼,隨后出現(xiàn)的幾起案子童社,更是在濱河造成了極大的恐慌,老刑警劉巖著隆,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叠洗,死亡現(xiàn)場離奇詭異,居然都是意外死亡旅东,警方通過查閱死者的電腦和手機灭抑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵代,“玉大人腾节,你說我怎么就攤上這事。” “怎么了案腺?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵庆冕,是天一觀的道長。 經常有香客問我劈榨,道長访递,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任同辣,我火速辦了婚禮拷姿,結果婚禮上,老公的妹妹穿的比我還像新娘旱函。我一直安慰自己响巢,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布棒妨。 她就那樣靜靜地躺著踪古,像睡著了一般。 火紅的嫁衣襯著肌膚如雪券腔。 梳的紋絲不亂的頭發(fā)上伏穆,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音纷纫,去河邊找鬼蜈出。 笑死,一個胖子當著我的面吹牛涛酗,可吹牛的內容都是我干的铡原。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼商叹,長吁一口氣:“原來是場噩夢啊……” “哼燕刻!你這毒婦竟也來了?” 一聲冷哼從身側響起剖笙,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤卵洗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弥咪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體过蹂,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年聚至,在試婚紗的時候發(fā)現(xiàn)自己被綠了酷勺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扳躬,死狀恐怖脆诉,靈堂內的尸體忽然破棺而出甚亭,到底是詐尸還是另有隱情,我是刑警寧澤击胜,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布亏狰,位于F島的核電站,受9級特大地震影響偶摔,放射性物質發(fā)生泄漏暇唾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一辰斋、第九天 我趴在偏房一處隱蔽的房頂上張望策州。 院中可真熱鬧,春花似錦亡呵、人聲如沸抽活。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丁逝,卻和暖如春汁胆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霜幼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工嫩码, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罪既。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓铸题,卻偏偏與公主長得像,于是被迫代替她去往敵國和親琢感。 傳聞我的和親對象是個殘疾皇子丢间,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容