OC物件的記憶體銷毀步驟

2021-07-10 16:59:30 字數 2038 閱讀 8587

general information

we take advantage of the documented deallocation timeline (wwdc 2011, session 322, 36:22).

1. -release to zero

* object is now deallocating and will die.

* new __weak references are not allowed, and will get nil.

* [self dealloc] is called

2. subclass -dealloc

* bottom-most subclass -dealloc is called

* non-arc code manually releases ivars

* walk the super-class chain calling -dealloc

3. nsobject -dealloc

* simply calls the objc runtime object_dispose()

4. object_dispose()

* call destructors for c++ ivars

* call -release for arc ivars

* erase associated references

* erase __weak references

* call free()

1. 呼叫 -release :引用計數變為零

* 物件正在被銷毀,生命週期即將結束.

* 不能再有新的 __weak 弱引用, 否則將指向 nil.

* 呼叫 [self dealloc]

2. 父類 呼叫 -dealloc

* 繼承關係中最底層的父類 在呼叫 -dealloc

* 如果是 mrc ** 則會手動釋放例項變數們(ivars)

* 繼承關係中每一層的父類 都在呼叫 -dealloc

3. nsobject 調 -dealloc

* 只做一件事:呼叫 objective-c runtime 中的 object_dispose() 方法

4. 呼叫 object_dispose()

* 為 c++ 的例項變數們(ivars)呼叫 destructors

* 為 arc 狀態下的 例項變數們(ivars) 呼叫 -release

* 解除所有使用 runtime associate方法關聯的物件

* 解除所有 __weak 引用

* 呼叫 free()

OC物件記憶體管理

objective c物件記憶體管理 1,管理範圍 任何繼承了nsobject的物件,基本資料型別 int,char,float,double,struct,enum等 是不需要管理記憶體的。2,引用計數器 每個oc物件都有自己的引用計數器,是乙個整數,表示 物件被引用的次數 既有多少人正在使用這個...

OC物件記憶體管理

nsobject a nsobject alloc init 這時候在堆中分配一塊記憶體,並在棧中建立變數a指標,並將在堆中分配的記憶體起始位址賦值給這個指標a 這樣棧中的指標a就指向了堆中的物件。通過a可以訪問堆中物件。ios物件在arc下是編譯器做記憶體管理,在適當的地方插入relase 當自動...

OC記憶體管理 zombie物件

當我們對於記憶體進行手動管理的時候,會出現兩種錯誤 一種是野指標錯誤,一種則為記憶體洩露.這兩點也是我們去管理記憶體時最終要解決的問題.記憶體洩漏是指 不在使用的物件,一直保留在記憶體中未被銷毀,一直占有著記憶體,耗費記憶體資源直至程式結束.野指標則是指 當乙個指標指向乙個物件時,此物件已經被系統 ...