1
我使用NSKeyedUnarchiver unarchiveObjectWithFile:
來讀取應用程序數據。當與儀器泄漏運行,據我所知,以下產生泄漏:IPhone - NSKeyedUnarchiver內存泄漏
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *archivePath = [[NSString alloc]initWithFormat:@"%@/Config.archive", documentsDirectory];
//Following line produces memory leak
applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
[archivePath release];
if(applicationConfig == nil)
{
applicationConfig = [[Config alloc]init];
}
else
{
[applicationConfig retain];
}
}
線:
applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
正在產生的32個字節的內存泄漏。 applicationConfig是一個實例變量。我initWithCode功能簡單地做:
- (id)initWithCoder:(NSCoder *)coder {
if(self = [super init])
{
//NSMutableArray
accounts = [[coder decodeObjectForKey:@"Accounts"] retain];
//Int
activeAccount = [coder decodeIntForKey:@"ActiveAccount"];
}
return self;
}
爲什麼
applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
是生產泄漏任何想法?
我想我讀了,我必須保留自我沒有分配它返回的對象。你能對此有所瞭解嗎? – Brian
是的,你必須保留它。因爲你保留了它,所以你也必須在某個地方釋放它。內存泄漏將是由於缺少版本引起的。 –
我在應用程序委託的dealloc方法(所有這些代碼所在的位置)中釋放applicationConfig。所以我仍然不明白報道的泄漏。它可能會認爲會有泄漏,因爲它沒有在同一個方法中看到匹配的版本?謝謝你的幫助。 – Brian