OC中的內(nèi)存管理

1,首先說一下什么是內(nèi)存.

內(nèi)存,簡單來說就是內(nèi)部存儲,通常說的話就是馮?諾依曼計算機(jī)結(jié)構(gòu),指出了計算機(jī)由運(yùn)算器,控制器,存儲器,輸入和輸出設(shè)備幾個部分組成,而且運(yùn)算器和控制器都合在一起,就是CPU,中央處理器,那么內(nèi)存就是CPU能直接讀寫訪問數(shù)據(jù)的地方,不過我們平時說的iphone內(nèi)存16G,64G,嚴(yán)格來說算外存,我們討論的不是這個,

那么內(nèi)存是用來存啥的呢? 指令 + 數(shù)據(jù),對于我們開發(fā)者來說,指令就是代碼邏輯,數(shù)據(jù)就是變量常量.

內(nèi)存有多大呢? 不大,現(xiàn)在主流的手機(jī)都是幾G,不過對于iphone來說都是1G.我們操作系統(tǒng)都是運(yùn)行在內(nèi)存之上的,1G好像不算大,所以為了支持多進(jìn)程(即同時多開幾個APP),也為了支持大程序,抽象的虛擬存儲概念誕生了.

2,什么是內(nèi)存管理?

剛才提到了蘋果手機(jī)的內(nèi)存就那么大,當(dāng)一個程序的內(nèi)存過大時,系統(tǒng)就會對程序產(chǎn)生內(nèi)存警告,Memory Waring,必要時會強(qiáng)制程序退出,這樣就會造成非常不好的用戶體驗,所以必須要對內(nèi)存進(jìn)行管理,也就是讓某些對象和 空間在不使用時被系統(tǒng)回收,防止造成內(nèi)存泄露而產(chǎn)生的內(nèi)存過大導(dǎo)致的app崩潰,

3,內(nèi)存管理的范圍(都誰需要被管理)

內(nèi)存管理的范圍: 任何繼承自NSObject的對象,對其他的基本數(shù)據(jù)類型不用管理

主要原因是:OC對象和其他基本數(shù)據(jù)類型在內(nèi)存中存儲的空間位置不一樣,對象存儲于堆中,需要程序員手動釋放,而其他的局部變量存放在棧中,由系統(tǒng)自動管理內(nèi)存,

4,如何進(jìn)行內(nèi)存管理?

每個OC對象都有一個引用計數(shù)retainCount,表示對象被引用的次數(shù),即現(xiàn)在有多少個東西在使用這個對象,當(dāng)一個對象剛被創(chuàng)建時,retainCount為 1,當(dāng)對象的retainCount為 0 時,對象被銷毀

相關(guān)概念:

內(nèi)存泄露:當(dāng)一個對象沒有指針指向時,這時他應(yīng)該被回收,如果你沒有被銷毀,這時就造成了內(nèi)存泄露.

野指針:訪問一塊壞的內(nèi)存,(已經(jīng)被回收的,不可用的)

僵尸對象:一個已經(jīng)被釋放的對象(可開啟僵尸對象檢測)

3,在日常開發(fā)中應(yīng)該怎么做好內(nèi)存管理(內(nèi)存管理機(jī)制,原則)

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

一,誰創(chuàng)建,誰release

1>如果你是通過alloc,copy,new來創(chuàng)建了一個對象,那么你就得調(diào)用release/autorelease操作

二,誰retain,誰release

只要你調(diào)用了retain,無論這個對象如何生成的,你都必須調(diào)用release

總結(jié):有始有終,有加有減,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容