2009-11-06 87 views
0

我有內存泄漏問題,我使用保存的陣列到一個文件:NSKeyedUnarchiver造成內存泄漏

[NSKeyedArchiver archiveRootObject:myArray toFile:MyFile]; 

的對象包括到所述陣列具有以下方法:

- (id)initWithCoder:(NSCoder *)coder 
{ 

[super init]; 

parameter1 = [[coder decodeObject] retain]; 
parameter2 = [[coder decodeObject] retain]; 
parameter3 = [[coder decodeObject] retain]; 

return self; 
} 

- (void)encodeWithCoder:(NSCoder *)coder 
{ 
[coder encodeObject:parameter1]; 
[coder encodeObject:parameter2]; 
[coder encodeObject:parameter3]; 
} 

解開我正在使用的對象:

myUnarchivedArray = [NSKeyedUnarchiver unarchiveObjectWithFile:myFile]; 

應用程序突然崩潰,因爲可用的內存ory不足以繼續。

我無法取消分配myUnarchivedArray,並且Intruments工具告訴我unarchiver導致內存泄漏。

我已經搜索不到太多,我只是找到了內存泄漏的原因,但我跳地發現,已經通過了同樣的問題,有一個尖來解決它的人。:)

謝謝!! 安娜

+0

這些物體有多大? – mahboudz 2009-11-06 22:54:19

+0

32個字節的aprox,但它們在數組內的數量是可變的。 – 2009-11-06 22:59:09

+0

您正在編碼/解碼自定義類型的對象?如果是這樣,請查看他們的編碼/解碼方法。 – nall 2009-11-06 22:59:46

回答

-1

你保留你的對象在的initWithCoder雖然文檔指出:

NSKeyedUnarchiver的實現,然而,返回一個自動釋放的對象,所以它的壽命是一樣的電流自動釋放池,而不是鍵入unarchiver。

+0

-1對象的生命期與當前autorelease池*,除非該對象被保留*。這是*標準* Objective-C內存管理。 – 2009-11-07 16:58:06

+0

什麼讓你認爲這個保留是平衡的發佈? – diciu 2009-11-07 17:29:44