iOS 內(nèi)存理解

對于iOS開發(fā)者來說,第一個要過的關(guān)大概就是iOS的內(nèi)存管理吧煤墙。

那么我第一篇就從iOS的內(nèi)存管理講起:

iOS內(nèi)存管理編程指南指出Objective-C提供了三種內(nèi)存管理方式:

1.Manual Retain-Relaease

開發(fā)者使用由NSObject和Runtime共同提供的引用計數(shù)模型麻惶,自己用代碼來管理內(nèi)存馍刮。

2.Automatic Reference Counting

ARC 自動引用計數(shù) 和MRR一樣同樣采用引用計數(shù),但是在編譯時插入內(nèi)存管理的方法窃蹋。這里ARC自動地幫助我們處理了引用計數(shù)相關(guān)的內(nèi)存操作卡啰。

3.Garbage Collection

垃圾回收。系統(tǒng)對于沒有引用的對象警没,自動化回收處理匈辱。Mac OS下使用,iOS不可以惠奸。

無論是內(nèi)存管理指南 還是 其他一些講到有關(guān)iOS內(nèi)存管理的書籍梅誓,都會提到內(nèi)存管理的方式:

1.自己生成的對象自己擁有(以alloc/new/copy/mutableCopy來頭的方法)

2.可以通過retain持有一個對象

3.不再需要一個對象時,要放棄對象的持有

4.使用中的對象不要進行release(引起crash)

ps:對于一些以alloc/new/copy/mutableCopy開頭的方法卻并不屬于上面所說的情況佛南,如:newer梗掰,copying,allocate等嗅回。對于一些能夠得到對象及穗,自己卻不持有的例子如[NSMutableArray array],其實是使用autorelease 實現(xiàn)的绵载。

autorelease的使用:

首先生成autopool 然后對象a調(diào)用autorelease把a對象放入autoPool中埂陆,autoPool調(diào)用drain相當于對pool內(nèi)所有的對象進行release

ps:autopool對象不可以使用autorelease方法。

ARC:

__strong 修飾符

所有的對象前綴都默認加上了__strong;


在ARC環(huán)境中這兩個的意思是一樣的

__strong 修飾的變量在超出它的作用域的時候會自動釋放娃豹,相當于調(diào)用了一次releease

就算是

使用非alloc/new/copy/mutableCopy開頭的類方法

因為是__strong強引用 也會變成自己持有焚虱。

ps:

原封不動的返回用alloc生成的對象,就能讓調(diào)用方也持有該對象

__weak 修飾符

因為__strong會出現(xiàn)循環(huán)引用問題 所以引入了__weak修飾符


聲明__weak修飾的變量對象

因為__weak修飾的變量持有對象的弱引用懂版,生成的對象會被立即釋放鹃栽。

_unsafe_unretained

使用_unsafe_unretained修飾的對象不屬于編譯器的內(nèi)存管理對象。

它和__weak修飾符一樣都不持有對象躯畴,所以生成的對象會被立即釋放民鼓。但是它和weak不同的是薇芝,在對象被釋放時weak修飾的指針變量會被設(shè)置成nil 而 _unsafe_unretained不會。

__autoreleasing 修飾符

ARC 中NSAutoReleasePool的代替

在寫的時候我們很少會加上__autoreleasing修飾符

不使用修飾


生成并非自己持有的對象丰嘉,由編譯器判斷它的方法名后自動注冊到autoreleasepool

因為沒有指定修飾符夯到,所以默認是strong,因為return讓變量超出了作用域饮亏,所以該強引用的對象會被釋放耍贾,但是作為函數(shù)返回值編譯器會自動把它加入到autoreleasepool。

ps:訪問__weak修飾符的變量時克滴,必定會訪問注冊到autoreleasepool的對象逼争。__weak持有對象的弱引用优床,在訪問過程中劝赔,對象可能被廢棄。所以會把對象注冊到autoreleasepool中胆敞,保證在autoreleasepool結(jié)束之前都可以確保對象存在着帽。

ps: id *類型 默認修飾符是 __autoreleasing

ps:需要注意的是在ARC環(huán)境中要顯式轉(zhuǎn)換id和void *

這時可以使用__bridge?

這種轉(zhuǎn)換的安全性和使用_unsafe_unretained類似

__bridge有兩種__bridge_retained和__bridge_transfer

__bridge_retained 這種轉(zhuǎn)換讓a和p和b同時持有該對象

__bridge_transfer這種變換先讓p持有對象 釋放a 然后讓b持有對象釋放p

通常用來于CF之間的轉(zhuǎn)換。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末移层,一起剝皮案震驚了整個濱河市仍翰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌观话,老刑警劉巖予借,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異频蛔,居然都是意外死亡灵迫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門晦溪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瀑粥,“玉大人,你說我怎么就攤上這事三圆∧唬” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵舟肉,是天一觀的道長修噪。 經(jīng)常有香客問我,道長路媚,這世上最難降的妖魔是什么黄琼? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮磷籍,結(jié)果婚禮上适荣,老公的妹妹穿的比我還像新娘现柠。我一直安慰自己,他們只是感情好弛矛,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布够吩。 她就那樣靜靜地躺著,像睡著了一般丈氓。 火紅的嫁衣襯著肌膚如雪周循。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天万俗,我揣著相機與錄音湾笛,去河邊找鬼。 笑死闰歪,一個胖子當著我的面吹牛嚎研,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播库倘,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼临扮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了教翩?” 一聲冷哼從身側(cè)響起杆勇,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饱亿,沒想到半個月后蚜退,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡彪笼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年钻注,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杰扫。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡队寇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出章姓,到底是詐尸還是另有隱情佳遣,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布凡伊,位于F島的核電站零渐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏系忙。R本人自食惡果不足惜诵盼,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧风宁,春花似錦洁墙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饮寞,卻和暖如春孝扛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幽崩。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工苦始, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慌申。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓陌选,卻偏偏與公主長得像,于是被迫代替她去往敵國和親太示。 傳聞我的和親對象是個殘疾皇子柠贤,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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

  • 前言:本篇內(nèi)容假設(shè)您已經(jīng)對內(nèi)存管理有了基礎(chǔ)的理解。如retain类缤、release、autorelease邻吭、auto...
    greatboygirl閱讀 675評論 0 3
  • 1.1 自動引用計數(shù)(ARC,Automatic Reference Counting) 自動引用計數(shù)是指內(nèi)存管理...
    SkyMing一C閱讀 1,095評論 0 5
  • 一餐弱、內(nèi)存管理的思考方式下文會常用到的術(shù)語解釋生成對象:創(chuàng)建對象持有對象:引用計數(shù)+1釋放對象:引用計數(shù)-1廢棄對象...
    iOSUI拖拽工程師閱讀 1,540評論 0 3
  • 在我們的生活中,疼痛是很多人都會面臨的問題囱晴。對我來說膏蚓,這是一個經(jīng)常面對的命題,比如今天畸写,一整天都在疼痛和渾渾噩噩中...
    左手咖啡右手娃閱讀 329評論 0 1
  • 日子總是過得很快驮瞧。暑假,過著在吃與睡之間輪回的日子把所有的熱情都磨滅殆盡枯芬。在和朋友商量多次也沒有找到暑假工的原...
    kimi芒閱讀 213評論 0 0