Objective C 記憶體管理

2021-09-06 05:24:03 字數 1935 閱讀 5459

objective-c 記憶體管理

nsautoreleasepool * pool = [[nsautoreleasepool alloc] init ]; [pool drain];

事實上程式中可以有多個自動釋放池。自動釋放池其實並不包含實際的物件本身,僅僅是對釋放的對 象的引用。通過向目前的自動釋放池傳送一條autorelease 訊息,可以將乙個物件新增到其中。

引用計數:

概念:建立物件時,將它的引用次數設定為1,每一次必須保持該物件時,就傳送一條retain 訊息, 使其引用次數加 1。

[myfraction retain];

不再需要物件時,可以通過傳送 release 訊息,使物件的引用次數減 1。 [myfraction release];

當引用計數為 0 的時候,系統就會釋放它的記憶體,通過向物件傳送dealloc 訊息。通過向物件傳送 retaincount 訊息可以獲得這個物件的引用計數, 返回的是nsuinteger 整數。 只要物件的引用計數不為0, 系統就不會釋放物件使用的記憶體。

將物件新增到任何型別的集合中都會使該物件的引用計數增加。從任何集合中刪除物件都能夠使其引 用計數減少。

記憶體中常量字串沒有引用計數機制,因為永遠不能釋放這些物件。這也適用於使用常量字串初始 化的不可變字串物件。

當某段**需要訪問乙個物件的時候, 將物件的引用計數器加1, 當其為0 表明不再有**訪問該物件 了,即物件將被銷毀(通過呼叫dealloc 方法) 。

乙個簡單的示例:

int main (int argc, const char * argv)

當使用

alloc、new

或者通過

copy

訊息(生成接受物件的乙個副本)建立乙個物件,物件的引用計數 器被設定成

1。傳送 retain

訊息將增加引用計數器,release 訊息減

1。

要獲得引用計數器的當前值,可以傳送retaincount 訊息

- (id) retain ;

- (void) release ;

- (unsinged) retaincount ;

訪問方法中的保留和釋放: 最好的方法設定的原則是(保持新的釋放舊的,誰擁有物件誰就複製釋放物件)

- (void ) setengine : (engine *) newengine

記憶體管理規則

獲得途徑

臨時物件

擁有物件

alloc/new/copy

不再使用時釋放物件

在 dealloc

方法中釋放物件

任何其他方法

不需要執行任何操作

獲得物件時保留,在

dealloc

方法中釋放物件

記憶體管理規則摘要:

1、釋放物件,可以釋放其所佔的記憶體,規則是:不再使用建立或者保持的物件時,就釋放它們。

2、傳送一條 release 訊息不一定銷毀物件,只有引用計數變為0 時,才銷毀這個物件。系統向

物件傳送一條 dealloc 訊息來釋放它所佔的記憶體。

3、自動釋放池在釋放池本身的時候自動釋放池中的物件。系統向每個物件傳送一條release 消

息,對引用計數變為 0 的物件傳送一條 dealloc 訊息來釋放它所佔的記憶體。

4、若你的方法中不再需要乙個物件時,但需要返回它,可傳送一條autorelease 訊息來加入自 

動釋放池。

5、若使用 alloc 或 copy 方法(或使用 allocwithzone:、copywithzone:或 mutablecopy 方法

來直接建立物件,則由你負責釋放它。每次retain 物件時,應該 release 或 autoreleas 它。

6、除了上以規則中提到的方法之外,不必費心地釋放其他方法返回的物件,這不是你的責任 

Objective C記憶體管理

objective c的物件記憶體管理是一件非常有意思的事情,由其是在iphone嵌入式裝置中 想玩的省心點,就得熟知它的管理規則,由其是記憶體的管理機制。了解它的品性了才能在cocoa的世界裡如魚得水。否則,反之 如水得魚!1,乙個物件可以有乙個或多個擁有者 2,當它乙個擁有者都沒有時,它就會被 ...

Objective C 記憶體管理

objective c中,記憶體物件分二類 1 值型別,如 int float struct等基本資料型別 2 引用型別,通常是指繼承自nsobject類的oc物件 值型別在棧中,由系統自動管理,而引用型別在堆上,需要我們自己手工進行管理 oc中提供了二種記憶體管理機制 1 手動引用計數 mrc m...

Objective C(記憶體管理)

引用計數器 每個oc物件都有乙個佔4個位元組儲存空間的引用計數器 當使用或建立乙個物件時,新物件的引用計數器預設是1 retain 可以使引用計數器 1 release 可以是引用計數器 1 retaincount 獲得當前的引用計數器的值 當物件被銷毀時,會重寫dealloc方法 void dea...