ios記憶體管理

2021-06-08 07:49:50 字數 973 閱讀 2012

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

當使用new、retain或copy建立乙個物件的時候,該物件的保留計數器+1;要增加物件的保留計數器值,可以傳送retain訊息;要減少物件保留計數器的值,傳送release或autorelease訊息;當物件的保留計數器值為0時,objective-c會自動向物件傳送一條dealloc訊息。

autorelease(自動釋放)和release功能類似,向乙個物件傳送release訊息時,會立刻執行,使物件的保留計數器-1;傳送autorelease時,表示將會在某個合適的階段將物件保留計數器-1.

#import @inte***ce test : nsobject

@end

@implementation test

-(id)init

return self;

}-(void)dealloc

@end

int main()

物件所有權:如果乙個物件具有指向其他物件的例項變數,則該物件擁有這些變數;同樣,如果乙個函式建立了某個物件,則該函式擁有它建立的這個物件。

1、任何自己建立的物件都歸自己所有(new、retain或copy建立乙個物件)

2、可以使用retain來獲得乙個物件的所有權(乙個物件的所有者可能不止乙個,擁有乙個物件的所有權就表示我們需要保持該物件存在)

3、當您不再使用您所擁有的物件時,您必須釋放對這些物件的所有權(向物件傳送release或者autorelease訊息)

4、您不能釋放非您所有的物件的所有權

.......待續

iOS記憶體管理

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

IOS 記憶體管理

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

IOS 記憶體管理

ios記憶體管理一直是頭疼的問題,有時間做些簡單的筆記 使用assign 對基礎資料型別 nsinteger cgfloat 和c 資料型別 int,float,double,char,等等 使用copy 對 nsstring 使用 retain 對其他 nsobject 和其子類 lnonatom...