OC 內(nèi)存管理

1.棧葬毫、堆

1.棧內(nèi)存是由系統(tǒng)管理的

2.棧是用來存放局部變量

3.當(dāng)代碼執(zhí)行到定義哪一行為這個局部變量分配存儲空間

4.當(dāng)程序執(zhí)行到定義變量的代碼塊結(jié)束的時候诸尽,就會回收這個變量

堆:

1撞秋,堆內(nèi)存是由程序員管理(動態(tài)存儲區(qū))

2. OC中的對象時在堆內(nèi)存中

2.引用計數(shù)器:

OC中每一個對象,都有4個字節(jié)存儲空間,用來存放引用計數(shù)的值

作用:

引用計數(shù)器的值徘熔,就是當(dāng)前有多少個人在使用對象

當(dāng)引用計數(shù)器為0時候车猬,系統(tǒng)會立即回收這個對象

在OC中判斷一個對象是否被回收的唯一依據(jù):就是看這個對象的引用計數(shù)器是否為0

如何操作引用計數(shù)器:

1.當(dāng)新創(chuàng)建一個對象的時候霉猛,他引用計數(shù)器為1(new,alloc,copy,multableCopy)

2.當(dāng)給一個對象發(fā)送retain消息,它的引用計數(shù)器+1

3.當(dāng)給一個對象發(fā)送release消息珠闰,它的引用計算器-1

當(dāng)一個對象的引用計數(shù)器為0時候惜浅,系統(tǒng)就會調(diào)用dealloc

作用:1.驗(yàn)證對象是否被回收了

2.釋放對象自己的資源

當(dāng)一個對象的引用計數(shù)器為0的時候,這個對象就是僵尸對象

3.野指針:

當(dāng)一個對象指針指向一個僵尸對象的時候伏嗜,那么這個指針就是野指針

當(dāng)定義一個指針坛悉,而這個指針沒有進(jìn)行初始化

操作野指針是非常危險的:1.程序崩潰了 2.數(shù)據(jù)錯誤

4.內(nèi)存管理是來管理“OC對象”的內(nèi)存的

內(nèi)存管理不當(dāng)造成兩個問題:

一個對象不再使用了,但是依然占據(jù)內(nèi)存承绸,內(nèi)存泄露

一個對象正在被使用裸影,但卻已經(jīng)釋放了,野指針八酒。

5.空指針:

nil:OC實(shí)例對象的指針指向nil時空民,這個指針就是一個空指針

1.給空指針發(fā)送消息不會報錯 2刃唐、它不會去調(diào)用方法

當(dāng)一個指針已經(jīng)被release了那么還要對該指針做一個清空的操作(person = nil)

防止后面使用到該指針的時候?qū)е鲁绦虮罎?/p>

6.nil 羞迷,Nil ,NULL,NSNull的區(qū)別

nil ?:OC對象的空指針

Nil ?:OC類對象的空指針

NULL :C語言的空指針

NSNull:是一個單例對象,用來在OC的集合中占的位置

7.內(nèi)存管理的原則:

1画饥、當(dāng)有人使用這個對象就不要釋放這個對象

2衔瓮、當(dāng)沒有人使用這個對象就釋放該對象

8.OC手動內(nèi)存管理的黃金法則:

凡是調(diào)用alloc,new,copy,multableCopy創(chuàng)建一個新對象或調(diào)用retain

讓對象的引用計數(shù)+1抖甘,都必須相應(yīng)的調(diào)用一次release或者autorelease

9.@property參數(shù)

管理內(nèi)存

retain 生產(chǎn)內(nèi)存管理的代碼

assign 沒有內(nèi)存管理的代碼(默認(rèn))

當(dāng)使用OC對象時候热鞍,就用retain

當(dāng)使用非OC對象(基本數(shù)據(jù)類型,枚舉衔彻,結(jié)構(gòu)體)時候薇宠,就用assign

當(dāng)使用NSString,Block對象時候艰额,就用copy

控制線程安全

nonatomic : 非線程安全的澄港,不加鎖,速度快(iOS基本都是用這個)

atomic:線程安全的柄沮,加鎖回梧,速度慢(默認(rèn)的)

控制訪問權(quán)限

readonly 表示只讀,只生成getter方法祖搓,不生產(chǎn)setter方法

readwrite 表示可讀寫的狱意,既生成getter又生產(chǎn)setter方法

修改getter和setter方法名稱

getter=getter方法的名稱

setter=setter方法的名稱:

一般當(dāng)一個成員變量是BOOL類型時候,需要修改getter方法名稱拯欧,為is+屬性名稱首字母大寫

10.@class 使用格式

@lass 類名;

作用:告訴編譯器详囤,@class后面是一個類,但是類中有什么樣屬性镐作,什么方法都不知道

@class 主要功能就是用來解決循環(huán)導(dǎo)入問題

在頭文件中使用@class說明這個類

如果在實(shí)現(xiàn)文件中有用到這個類的方法或?qū)傩圆亟悖捅仨氃趯?shí)現(xiàn)文件(.m文件)導(dǎo)入這個類

11.循環(huán)retain蚓再,導(dǎo)致在環(huán)中的所有對象對象都不能釋放,(內(nèi)存泄露)

解決方法:

只要環(huán)中有一條線用retain的包各,另一條線是assign

注意:用assign的一端在重寫dealloc方法時不需要給對方的對象做release釋放操作

12.autorelease 基本使用

作用:延遲對象的釋放時間

原理:

當(dāng)一個對象調(diào)用autorelease時候摘仅,就會把這個對象放到自動釋放池中,這時候?qū)ο髴?yīng)用計數(shù)器沒有發(fā)生改變

當(dāng)自動釋放池銷毀的時候问畅,會對池中所有對象進(jìn)行一次release操作

當(dāng)你給一個對象發(fā)送多少次autorelease消息娃属,那么當(dāng)自動釋放池銷毀時候,就會相應(yīng)的調(diào)用多少次release

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末护姆,一起剝皮案震驚了整個濱河市矾端,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卵皂,老刑警劉巖秩铆,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異灯变,居然都是意外死亡殴玛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門添祸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滚粟,“玉大人,你說我怎么就攤上這事刃泌》踩溃” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵耙替,是天一觀的道長亚侠。 經(jīng)常有香客問我,道長俗扇,這世上最難降的妖魔是什么硝烂? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狐援,結(jié)果婚禮上钢坦,老公的妹妹穿的比我還像新娘。我一直安慰自己啥酱,他們只是感情好爹凹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镶殷,像睡著了一般禾酱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天颤陶,我揣著相機(jī)與錄音颗管,去河邊找鬼。 笑死滓走,一個胖子當(dāng)著我的面吹牛垦江,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搅方,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼比吭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姨涡?” 一聲冷哼從身側(cè)響起衩藤,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涛漂,沒想到半個月后赏表,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匈仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年瓢剿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锚沸。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡跋选,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哗蜈,到底是詐尸還是另有隱情,我是刑警寧澤坠韩,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布距潘,位于F島的核電站,受9級特大地震影響只搁,放射性物質(zhì)發(fā)生泄漏音比。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一氢惋、第九天 我趴在偏房一處隱蔽的房頂上張望洞翩。 院中可真熱鬧,春花似錦焰望、人聲如沸骚亿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽来屠。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俱笛,已是汗流浹背捆姜。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迎膜,地道東北人泥技。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像磕仅,于是被迫代替她去往敵國和親零抬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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

  • ARC 一宽涌、簡介 在Objective-C中采用Automatic Reference Counting (ARC...
    伶俐ll閱讀 1,640評論 0 3
  • OC內(nèi)存管理一平夜、基本原理(一)為什么要進(jìn)行內(nèi)存管理。由于移動設(shè)備的內(nèi)存極其有限卸亮,所以每個APP所占的內(nèi)存也是有限制...
    ScaryMonsterLyn閱讀 510評論 0 3
  • 今天看到一篇不錯的文章關(guān)于OC內(nèi)存管理的,轉(zhuǎn)載一下與你共享概述我們知道在程序運(yùn)行過程中要創(chuàng)建大量的對象忽妒,和其他高級...
    niceSYT閱讀 443評論 0 2
  • OC內(nèi)存管理 一、基本原理 (一)為什么要進(jìn)行內(nèi)存管理兼贸。 由于移動設(shè)備的內(nèi)存極其有限段直,所以每個APP所占的內(nèi)存也是...
    iOS_Developer閱讀 386評論 0 3
  • 我不想在懸崖邊上徘徊,可是找不到回頭的路溶诞,只能好好的站在這里鸯檬,保證不掉下去。 討厭傷春悲秋螺垢,卻感嘆時...
    潮汐有信閱讀 407評論 0 0