記憶體管理 黃金法則

2021-09-24 15:56:23 字數 1296 閱讀 7189

1、記憶體管理-**法則

如果對乙個物件使用了alloc、[mutable]copy、retain,那麼你必須使用相應的release或者autorelease。

型別定義:

基本型別:任何c的型別,如:int、short、char、long、struct、enum、union等屬於基本型別或者結構體;

記憶體管理對於c語言基本型別無效;

任何繼承與nsobject類的物件都屬於oc型別。所有oc物件都有乙個計數器,保留著當前被引用的數量。

記憶體管理物件:

oc的物件:凡是繼承於nsobject;

每乙個物件都有乙個retaincount計數器。表示當前的被應用的計數。如果計數為0,那麼就真正的釋放這個物件。

alloc、retain、release函式:

1)alloc 函式是建立物件使用,建立完成後計數器為1;只用1次。

2)retain是對乙個物件的計數器+1;可以呼叫多次。

3)release是對乙個物件計數器-1;減到0物件就會從記憶體中釋放。

增加物件計數器的三種方式:

1)當明確使用alloc方法來分配物件;

2)當明確使用copy[withzone:]或者mutablecopy[withzone:]copy物件的時;

3)當明確使用retain訊息。

上述三種方法使得計數器增加,那麼就需要使用[auto]release來明確釋放物件,也就是遞減計數器。

………………

附加**

………………

2、retain點語法

oc記憶體管理正常情況要使用大量的retain和release操作;

點語言可以減少使用retain和release的操作。

編譯器對於retain展開形式:

@property (retain)dog *dog;

展開為:-(void) setdog:(dog *)adog;

-(dog *)dog;

@synthesize dog = _dog;  //(retain屬性)

展開為:-(void) setdog:(dog *)adog

};-(dog *)dog;

copy屬性:copy屬性是完全把物件重新拷貝乙份,計數器重新設定為1,和之前拷貝的資料完全脫離關係。

記憶體管理 黃金法則

1 記憶體管理 法則 如果對乙個物件使用了alloc mutable copy retain,那麼你必須使用相應的release或者autorelease。型別定義 基本型別 任何c的型別,如 int short char long struct enum union等屬於基本型別或者結構體 記憶體...

OC記憶體管理 黃金法則

1 記憶體管理 法則 如果對乙個物件使用了alloc mutable copy retain,那麼你必須使用相應的release或者autorelease。型別定義 基本型別 任何c的型別,如 int short char long struct enum union等屬於基本型別或者結構體 記憶體...

OC記憶體管理 黃金法則

1.記憶體管理 法則 如果對乙個物件使用了alloc mutable copy retain,那麼必須使用相應的release或autorelease。型別定義 基本型別 任何c的型別,如 int short char long struct enum union等屬於基本結構型別或結構體。記憶體管...