Fra*_*ank 2 memory iphone memory-leaks memory-management objective-c
我很难在代码中抓住这个内存泄漏.基本上它返回一个包含对象的对象.这是以下代码:
-(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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试保留返回的对象并在使用后立即释放:
id options = [[self getOptions] retain];
[options release];
Run Code Online (Sandbox Code Playgroud)
基本上,从iphone文档中,我应该在我的mutatbe数组上为文件阵列自动释放它,但我仍然得到内存泄漏,任何人都可以对此有所了解,将不胜感激.
编辑:
我刚刚添加了这个以确定它是否可以解决任何问题,但我仍在泄漏:
FileManager *file = [[FileManager alloc] initWithFileName:@"optionsFile.dat"];
NSMutableArray *fileArray = [file loadFile: @"optionsFile"];
Options *options = [fileArray objectAtIndex:0];
[file release];
return options;
Run Code Online (Sandbox Code Playgroud)
对于每个init
或retain
电话,您应该致电release
(或autorelease
).
该Options
对象缺少一个release
电话.您应该,不保留返回的对象getOptions
,或返回自动释放的实例.约定通常是返回一个自动释放的对象,为此,只需将return语句更改为:
return [options autorelease];
Run Code Online (Sandbox Code Playgroud)
这样,如果调用者想要保留它,他们可以,但如果他们只是使用结果并丢弃对象,他们不必做任何事情,它将由自动释放池释放.
另外,fileArray
还没有发布.完成后,请致电[fileArray release]
;
您应该阅读" 内存管理指南"的部分内容,以便更好地了解如何管理此类泄漏.
归档时间: |
|
查看次数: |
2086 次 |
最近记录: |