Object 5 記憶體管理

2021-06-22 22:50:41 字數 800 閱讀 1254

記憶體管理

object-c為每個對像提供乙個內部計數器,這個計數器跟蹤物件的引用次數。所有類都繼承自nsobject的物件retain和release方法

當物件被建立或拷貝的時候,引用計數為1.每次保持物件時候,就傳送一條retain訊息,使其引用計數加1,如果不需要這個物件就傳送乙個release訊息使其引用計數減1,當物件的引用計數為0的時候,系統就會釋放它的記憶體。

當建立的物件有一下關鍵字(alloc,copy,retain)時,請記得要呼叫release釋放,原則:誰建立,誰釋放。

retaincount 方法用於取得引用計數的int值,當retaincount的值到達0,物件會呼叫dealloc

dealloc 方法用於釋放物件前釋放物件的成員變數,其中要先釋放自身成員變數,再呼叫[super dealloc]。

例如:-(void) dealloc

自動釋放池(autorelease pool)

提供了乙個物件容器,每次物件傳送autorelease訊息時,物件d引用計數並不真正變化,而是向記憶體釋放池中新增一條記錄,記下物件的這種要求,直到當記憶體釋放池傳送drain或release訊息時,當被銷毀前會通知池中的所有物件,全部傳送release訊息,真正將引用計數減少。

這些語句必須要放在下面語句之間,直到池被釋放,乙個物件想要納入記憶體釋放池物件,必須要傳送autorelease。

nsautoreleasepool *pool = [[nsautoreleasepool alloc] init]

…...

[pool release];

//[pool drain];

Object的記憶體布局

物件在記憶體中的長度不一定等於sizeof member 1 sizeof member 2 sizeof member n 因為有三種情況需要考慮 1.空類 空類中沒有任何資料成員,按理說此類的物件長度為0,則不佔任何空間.但實際情況是,空類的長度為1 byte.如果物件完全不占用任何空間,那麼空...

OC 記憶體管理 記憶體5大區域

棧區域 系統自動分配.儲存區域性變數 如 int num 10,int p num。num 與 p 都儲存在棧區域 堆區域 允許程式設計師手動的從堆申請空間來使用,要主動釋放。除非程式結束 如 int 4,float 4 malloc,calloc bss段區域 儲存未初始化的全域性變數 靜態變數,...

OC學習5 記憶體管理 上

一 範圍 任何繼承了 nsobject 的物件,對基本資料型別無效。二 原理 1.每個物件內部都儲存乙個與之相關聯的整數,稱為引用計數器 2.當使用 alloc new 或者copy 建立乙個物件的時候,物件引用計數器被設定為1 3.給物件傳送一條 retain 訊息,可以使引用計數器值 1 4.給...