【发布时间】:2010-12-20 00:32:38
【问题描述】:
我很难理解代码中的这种内存泄漏。基本上它返回一个包含对象的对象。这是以下代码:
-(id) getOptions {
FileManager *file = [[FileManager alloc] initWithFileName:@"optionsFile.dat"];
Options *options = [[Options alloc] init];
NSMutableArray *fileArray = [[NSMutableArray alloc] init];
fileArray = [file loadFile: @"optionsFile"];
if ([fileArray count] > 0) {
options = [fileArray objectAtIndex:0];
}
[file release];
return options;
}
我尝试保留返回的对象并在使用后立即释放:
id options = [[self getOptions] retain];
[options release];
基本上,从 iphone 文档中,我应该在我的 mutatbe 数组上自动释放它以用于 filearray,但我仍然遇到内存泄漏,任何人都可以对此有所了解,将不胜感激。
编辑:
我只是添加了这个看看它是否能解决任何问题,但我仍然在泄漏:
FileManager *file = [[FileManager alloc] initWithFileName:@"optionsFile.dat"];
NSMutableArray *fileArray = [file loadFile: @"optionsFile"];
Options *options = [fileArray objectAtIndex:0];
[file release];
return options;
【问题讨论】:
-
您不需要分配和初始化每个变量。当您这样做时,对该变量的每个分配都会覆盖您新分配的对象。
标签: objective-c iphone memory memory-management memory-leaks