iOS總結(jié)內(nèi)存管理

說到iOS的內(nèi)存管理,需要明白如下幾個問題:

1变隔、iOS內(nèi)存管理的機(jī)制

內(nèi)存管理是程序設(shè)計(jì)中很重要的一部分规伐,程序在運(yùn)行的過程中消耗內(nèi)存,運(yùn)行結(jié)束后釋放占用的內(nèi)存匣缘。如果程序運(yùn)行時一直分配內(nèi)存而不及時釋放無用的內(nèi)存猖闪,會造成這樣的后果:程序占用的內(nèi)存越來越大,直至內(nèi)存消耗殫盡肌厨,程序因無內(nèi)存可用導(dǎo)致崩潰培慌,這樣的情況我們稱之為內(nèi)存泄漏。

2柑爸、在哪開辟內(nèi)存吵护?什么時候開辟內(nèi)存?什么時候釋放內(nèi)存表鳍?

IOS開發(fā)中馅而,內(nèi)存中的對象主要有兩類,一類是值類型譬圣,比如int瓮恭、float、struct等基本數(shù)據(jù)類型厘熟,另一類是引用類型屯蹦,也就是繼承自NSObject類的所有的OC對象。前一種值類型不需要我們管理绳姨,后一種引用類型是需要我們管理內(nèi)存的登澜,一旦管理不好,就會產(chǎn)生非常糟糕的后果飘庄。

為什么值類型不需要管理內(nèi)存脑蠕,而引用類型需要?

因?yàn)橹殿愋褪谴鎯Φ綏V械慕咴祝麄兿冗M(jìn)先出空郊,依次緊密排列份招;引用類型是存儲在堆上的切揭,給對象開辟空間時會隨機(jī)從內(nèi)存開辟空間。

棧內(nèi)存與堆內(nèi)存從性能上比較锁摔,棧內(nèi)存要優(yōu)于堆內(nèi)存廓旬,這是因?yàn)闂W裱冗M(jìn)后出的原則,因此當(dāng)數(shù)據(jù)量過大時,存入棧會明顯的降低性能孕豹。因此涩盾,我們會把大量的數(shù)據(jù)存入堆中,然后棧中存放堆的地址励背,當(dāng)需要調(diào)用數(shù)據(jù)時春霍,就可以快速的通過棧內(nèi)的地址找到堆中的數(shù)據(jù)。

值類型和引用類型之間是可以相互轉(zhuǎn)化的叶眉,把值類型轉(zhuǎn)化為引用類型的過程叫做裝箱址儒,比如把int包裝為NSNumber,這個過程會增加程序的運(yùn)行時間衅疙,降低性能莲趣。而把引用類型轉(zhuǎn)為值類型的過程叫做拆箱,比如把NSNumer轉(zhuǎn)為float饱溢,在拆箱的過程中喧伞,我們一定要注意數(shù)據(jù)原有的類型,如果類型錯誤绩郎,可能導(dǎo)致拆箱失敗潘鲫,因此會存在安全性的問題。手動的拆箱和裝箱嗽上,都會增加程序的運(yùn)行時間次舌,降低代碼可讀性,影響性能兽愤。

在IOS開發(fā)過程中彼念,棧內(nèi)存中的值類型系統(tǒng)會自動管理,堆內(nèi)存中的引用類型是需要我們管理的浅萧。每個OC對象內(nèi)部都專門有四個字節(jié)來存儲引用計(jì)數(shù)器逐沙,它是一個整數(shù),表示對象被引用的次數(shù)洼畅,通過它可以判斷對象是否被回收吩案,如果引用計(jì)數(shù)為0,對象回收帝簇,不為0不回收徘郭。當(dāng)對象執(zhí)行alloc、new或者retain時丧肴,引用計(jì)數(shù)加1残揉,release時,引用計(jì)數(shù)減1芋浮。

3抱环、幾個關(guān)鍵字

MRC手動管理模式

MRC遵循誰開辟內(nèi)存,誰釋放內(nèi)存的原則。誰alloc镇草,誰release眶痰;誰retain,誰relase梯啤。引用計(jì)數(shù)為0的時候收回竖伯,如果為0時,沒有被收回因宇,則會出現(xiàn)內(nèi)存泄漏黔夭。

ARC自動管理模式

ARC內(nèi)存管理增加了strong和weak關(guān)鍵字,相當(dāng)于MRC的retain和assign羽嫡,不過weak可以釋放指針對象本姥,指針指向的地址被釋放后本身也會被釋放。

strong :強(qiáng)引用杭棵,ARC中使用婚惫,與MRC中retain類似,使用之后魂爪,計(jì)數(shù)器+1先舷。

weak :弱引用 ,ARC中使用滓侍,如果只想的對象被釋放了蒋川,其指向nil,可以有效的避免野指針撩笆,其引用計(jì)數(shù)為1捺球。在MRC中,如果引用計(jì)數(shù)為0夕冲,繼續(xù)release就會造成野指針

readwrite : 可讀可寫特性氮兵,需要生成getter方法和setter方法時使用。

readonly : 只讀特性歹鱼,只會生成getter方法 不會生成setter方法泣栈,不希望屬性在類外改變。

assign :賦值特性弥姻,不涉及引用計(jì)數(shù)南片,弱引用,setter方法將傳入?yún)?shù)賦值給實(shí)例變量庭敦,僅設(shè)置變量時使用疼进。

retain :表示持有特性,setter方法將傳入?yún)?shù)先保留螺捐,再賦值颠悬,傳入?yún)?shù)的retaincount會+1。

copy :表示拷貝特性定血,setter方法將傳入對象復(fù)制一份赔癌,需要完全一份新的變量時。

nonatomic :非原子操作澜沟,不加同步灾票,多線程訪問可提高性能,但是線程不安全的茫虽。決定編譯器生成的setter getter是否是原子操作刊苍。

atomic :原子操作,同步的濒析,表示多線程安全正什,與nonatomic相反。

4号杏、深拷貝和淺拷貝婴氮,有什么影響?不同類型的限制

淺拷貝是將原始對象中的數(shù)據(jù)型字段拷貝到新對象中去盾致,將引用型字段的“引用”復(fù)制到新對象中去主经,不把“引用的對象”復(fù)制進(jìn)去,所以原始對象和新對象引用同一對象庭惜,新對象中的引用型字段發(fā)生變化會導(dǎo)致原始對象中的對應(yīng)字段也發(fā)生變化罩驻。

? ? 深拷貝是在引用方面不同,深拷貝就是創(chuàng)建一個新的和原始字段的內(nèi)容相同的字段护赊,是兩個一樣大的數(shù)據(jù)段惠遏,所以兩者的引用是不同的,之后的新對象中的引用型字段發(fā)生改變骏啰,不會引起原始對象中的字段發(fā)生改變爽哎。

我們可以認(rèn)為,如果對一不可變對象復(fù)制器一,copy是指針復(fù)制(淺拷貝)和mutableCopy就是對象復(fù)制(深拷貝)课锌。如果是對可變對象復(fù)制,都是深拷貝祈秕,但是copy返回的對象是不可變的渺贤。mutableCopy總會產(chǎn)生新對象,實(shí)現(xiàn)深拷貝请毛。注意看第五點(diǎn)志鞍,產(chǎn)生的副本對象

5方仿、在哪些情況會產(chǎn)生一個新的對象固棚?

6统翩、ARC和MRC,問題有哪些此洲?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厂汗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呜师,更是在濱河造成了極大的恐慌娶桦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汁汗,死亡現(xiàn)場離奇詭異衷畦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)知牌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門祈争,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人角寸,你說我怎么就攤上這事铛嘱。” “怎么了袭厂?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵墨吓,是天一觀的道長。 經(jīng)常有香客問我纹磺,道長帖烘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任橄杨,我火速辦了婚禮秘症,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘式矫。我一直安慰自己乡摹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布采转。 她就那樣靜靜地躺著聪廉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪故慈。 梳的紋絲不亂的頭發(fā)上板熊,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音察绷,去河邊找鬼干签。 笑死,一個胖子當(dāng)著我的面吹牛拆撼,可吹牛的內(nèi)容都是我干的容劳。 我是一名探鬼主播喘沿,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竭贩!你這毒婦竟也來了蚜印?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤娶视,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后睁宰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肪获,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年柒傻,在試婚紗的時候發(fā)現(xiàn)自己被綠了孝赫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡红符,死狀恐怖青柄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情预侯,我是刑警寧澤致开,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站萎馅,受9級特大地震影響双戳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糜芳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一飒货、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峭竣,春花似錦塘辅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扛吞,卻和暖如春沮榜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喻粹。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工蟆融, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人守呜。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓型酥,卻偏偏與公主長得像山憨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弥喉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,339評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,092評論 1 32
  • 內(nèi)存管理 簡述OC中內(nèi)存管理機(jī)制郁竟。與retain配對使用的方法是dealloc還是release,為什么由境?需要與a...
    丶逐漸閱讀 1,958評論 1 16
  • 沒有一個人愿意說 自己是個Low逼虏杰。在這個每人都宣稱自己是“女漢子”的時代讥蟆。,我們好像都活在自己營造的假象里纺阔,疲...
    噴嚏是啊切閱讀 215評論 0 2
  • 藝術(shù)學(xué)院第十期青馬工程之“人人都是自媒體”講座順利舉行 (冰花通訊社記者孫遜)11月13日中午12點(diǎn)30分藝術(shù)學(xué)院...
    東北大學(xué)2018閱讀 69評論 0 0