OC記憶體管理 黃金法則

2021-06-25 15:48:17 字數 1298 閱讀 6240

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,和之前拷貝的資料完全脫離關係

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等屬於基本型別或者結構體 記憶體...

記憶體管理 黃金法則

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