iOS的記憶體管理

2021-09-27 07:41:11 字數 835 閱讀 5022

通過字面的方式建立出來的物件儲存在常量區,通過物件方法和類方法建立出來的物件儲存在堆區

記憶體有系統管理,區域性變數儲存在棧,當變數離開其所在**快就會被**

堆記憶體需要程式設計師自己管理,oc中的物件儲存在堆中

記憶體管理不當會造成的兩個問題

記憶體洩露,不再需要的物件沒有釋放,導致記憶體洩露,記憶體洩露會造成程式閃退

野指標,正在使用的物件被釋放了,導致野指標,野指標會導致程式奔潰

mrc 手動記憶體管理

引用計數

每乙個物件都有乙個引用計數

當物件出生的時候引用計數器為1

當呼叫物件的release訊息的時候,計數器-1

當乙個物件的引用計數為0的時候,這個物件立即被**

記憶體管理原則

當給乙個物件傳送alloc new copy retain訊息的時候,就必須在適當的時候傳送release或者autorelease訊息

當你需要乙個物件的時候就給這個物件的引用器+1,當你不需要這個物件的時候,就需要將物件計數器-1

多個物件管理

setter方法

當設定新物件的時候需要做一次retain操作

當原來的物件不需要了,需要對原來的物件做一次release操作

如果是同乙個物件,就不需要retain和release操作

當物件消失前,會釋放成員所占有的記憶體

在釋放記憶體之前首先要呼叫【super dealloc】

當兩個或多個物件引用構成乙個封閉的環就是迴圈引用

迴圈引用導致環中的物件釋放不了

解決迴圈引用,有一端必須是assign的

@property的使用

基本資料型別使用assign

iOS的記憶體管理

今晚有空,總結一下學習ios記憶體管理的一些認識。文章中可能會涉及一些相對底層的知識,c的記憶體管理知識,慎入。前方高能!前方高能!前方高能!經典的記憶體劃分 棧 堆 bss段 資料段 段。如 下圖 先說堆疊 在c語言裡,可以簡單的說malloc等方法主動申請記憶體,其記憶體空間是在堆上,其他的在棧...

ios記憶體管理

引用計數 每個物件有乙個與之相關的整數,稱作 引用計數器 或者 保留計數器 當某段 需要訪問乙個物件時,該段 會將物件的保留計數器 1,表示需要訪問這個物件 當結束對該物件的訪問時,保留計數器 1,表示它不在訪問該物件 當保留計數器為0時,物件被銷毀,所佔記憶體被系統收回。當使用new retain...

iOS記憶體管理

前提 1 以下是針對cocoa物件,不包括core foundation 2 cocoa物件都是用引用計數來跟蹤物件的記憶體使用情況的。3 在子類裡面父類先初始化和後釋放的原則。自己想下為什麼 棧空間和堆空間的區別。我們說的記憶體管理都是基於堆空間的,因為函式內的棧空間是由編譯器自己控制的。關於co...