通過字面的方式建立出來的物件儲存在常量區,通過物件方法和類方法建立出來的物件儲存在堆區
記憶體有系統管理,區域性變數儲存在棧,當變數離開其所在**快就會被**
堆記憶體需要程式設計師自己管理,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...