iOS內(nèi)存管理

如果要說iOS的內(nèi)存管理問題浑玛,先要知道Objective-C是一門什么樣的語言 —> Objective-C是一門面向?qū)ο蟮恼Z言挑秉。

我們知道在程序運行過程中要創(chuàng)建大量的對象舅逸,和其他高級語言類似粹淋,在Objective-C中對象時存儲在堆中的,系統(tǒng)并不會自動釋放堆中的內(nèi)存(注意基本類型是由系統(tǒng)自己管理的桶错,放在棧上入:int float 等)。如果一個對象創(chuàng)建并使用后沒有得到及時釋放那么就會占用大量內(nèi)存胀蛮。其他高級語言如C#院刁、Java都是通過垃圾回收來(GC)解決這個問題的,但在Objective-C中并沒有類似的垃圾回收機制粪狼,因此它的內(nèi)存管理就需要由開發(fā)人員手動維護退腥。今天將著重介紹Objective-C內(nèi)存管理:

一、Objective-C 內(nèi)存管理的對象

  • 1再榄、內(nèi)存管理的對象主要有兩類:
    ①基本數(shù)據(jù)類型:int 狡刘、float、 struct 等困鸥。
    ②引用類型:繼承自NSObject類的所有Objective-C對象嗅蔬。
    第一種基本數(shù)據(jù)類型不需要我們管理,第二種需要管理疾就。

  • 2澜术、管理內(nèi)存的原理:
    ①值類型一般都會被放入棧中(先進后出),引用類型會被放到堆中猬腰,當(dāng)給對象分配內(nèi)存空間時鸟废,會隨機從內(nèi)存當(dāng)中開辟空間,對象和對象之間可能會存在很多碎片姑荷,這些碎片空間需要我們管理盒延。
    ②棧內(nèi)存從性能上來說優(yōu)于堆內(nèi)存,數(shù)據(jù)量過大的時候鼠冕,我們會把數(shù)據(jù)存入堆中添寺,然后在棧中存放堆的地址,這樣調(diào)用數(shù)據(jù)的時候供鸠,就可以快速的通過棧中的地址拿到堆中的數(shù)據(jù)畦贸。
    ③裝箱:把int等包裝成NSNumber(會降低性能);
    拆箱:把NSNumber轉(zhuǎn)化為float等 (注意類型錯誤時候的安全性問題)楞捂;
    裝箱和拆箱會增加代碼的運行時間薄坏,降低代碼可讀性,影響性能寨闹。

二胶坠、內(nèi)存管理方式 主要是MRC和ARC管理方式;

  • MRC:手動管理內(nèi)存有時候并不容易繁堡,因為對象的引用有時候是錯綜復(fù)雜的沈善,對象之間可能互相交叉引用乡数,此時需要遵循一個法則:誰創(chuàng)建,誰釋放闻牡。
  • ARC:在Objective-C中也有一種內(nèi)存自動釋放的機制叫做“自動引用計數(shù)”(或“自動釋放池”)净赴,與C#、Java不同的是罩润,這只是一種半自動的機制玖翅,有些操作還是需要我們手動設(shè)置的。自動內(nèi)存釋放使用@autoreleasepool關(guān)鍵字聲明一個代碼塊割以,如果一個對象在初始化時調(diào)用了autorelase方法金度,那么當(dāng)代碼塊執(zhí)行完之后,在塊中調(diào)用過autorelease方法的對象都會自動調(diào)用一次release方法严沥。這樣一來就起到了自動釋放的作用猜极,同時對象的銷毀過程也得到了延遲(統(tǒng)一調(diào)用release方法)。

autorelease方法不會改變對象的引用計數(shù)器消玄,只是將這個對象放到自動釋放池中跟伏;
自動釋放池實質(zhì)是當(dāng)自動釋放池銷毀后調(diào)用對象的release方法,不一定就能銷毀對象(例如如果一個對象的引用計數(shù)器>1則此時就無法銷毀)莱找;
由于自動釋放池最后統(tǒng)一銷毀對象酬姆,因此如果一個操作比較占用內(nèi)存(對象比較多或者對象占用資源比較多),最好不要放到自動釋放池或者考慮放到多個自動釋放池奥溺;
ObjC中類庫中的靜態(tài)方法一般都不需要手動釋放,內(nèi)部已經(jīng)調(diào)用了autorelease方法骨宠;

三浮定、MRC與ARC混編 在ARC項目中,對MRC文件可以添加 -fno-objc-arc標(biāo)識层亿;在MRC中桦卒,對ARC的文件可以添加 -fobjc-arc 的標(biāo)識。(或者可以把MRC文件轉(zhuǎn)為ARC匿又,現(xiàn)在多用ARC方灾,但是有些第三方框架還是MRC的需要處理);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碌更,一起剝皮案震驚了整個濱河市裕偿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痛单,老刑警劉巖嘿棘,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旭绒,居然都是意外死亡鸟妙,警方通過查閱死者的電腦和手機焦人,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來重父,“玉大人花椭,你說我怎么就攤上這事》课纾” “怎么了矿辽?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歪沃。 經(jīng)常有香客問我嗦锐,道長,這世上最難降的妖魔是什么沪曙? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任奕污,我火速辦了婚禮,結(jié)果婚禮上液走,老公的妹妹穿的比我還像新娘碳默。我一直安慰自己,他們只是感情好缘眶,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布嘱根。 她就那樣靜靜地躺著,像睡著了一般巷懈。 火紅的嫁衣襯著肌膚如雪该抒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天顶燕,我揣著相機與錄音凑保,去河邊找鬼。 笑死涌攻,一個胖子當(dāng)著我的面吹牛欧引,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恳谎,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼芝此,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了因痛?” 一聲冷哼從身側(cè)響起婚苹,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婚肆,沒想到半個月后租副,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡较性,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年用僧,在試婚紗的時候發(fā)現(xiàn)自己被綠了结胀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡责循,死狀恐怖糟港,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情院仿,我是刑警寧澤秸抚,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站歹垫,受9級特大地震影響剥汤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜排惨,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一吭敢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暮芭,春花似錦鹿驼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑞筐,卻和暖如春凄鼻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聚假。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工野宜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魔策。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像河胎,于是被迫代替她去往敵國和親闯袒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

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