Che*_*tan -1 loops memory-management objective-c
我的程序中有一个非常大的循环,我使用了很多临时变量和实例变量.当我的循环继续运行时,程序会占用越来越多的内存,直到崩溃为止.在这种情况下,我可以就如何正确的内存管理获得一些建议吗?我的主要问题是,为什么以下代码有误?
以下是导致泄漏的代码:
(void)processTrackValues:(NSMutableArray*)tags {
NSImage*trackArt = [tags objectAtIndex:5];
NSMutableArray*tempArtArray = [[NSMutableArray alloc] init];
[tempArtArray addObject:trackArt];
[tempArtArray发布];
}
我也尝试过:
(void)processTrackValues:(NSMutableArray*)tags {
NSImage*trackArt = [tags objectAtIndex:5];
NSMutableArray*tempArtArray = [[NSMutableArray alloc] init];
[tempArtArray addObject:trackArt];
[trackArt发布];
[tempArtArray发布];
}
亚当的回答是正确的.在伪代码中:
unsigned int iters = 0;
NSAutoreleasePool *p = nil;
while(1) {
if (!p) p = [[NSAutoreleasePool alloc] init];
... do stuff here ...
if ( iters == 1000) {
iters = 0;
[p drain];
p = nil;
}
}
Run Code Online (Sandbox Code Playgroud)
重复使用临时物体通常是浪费时间并且充满脆弱性.
坦率地说,你可能只需要每循环一次就进行一次自动释放池跳舞,并忽略任何愚蠢的计数器等,直到你有证据证明存在开销.
就像是:
NSAutoreleasePool *p = nil;
while(1) {
p = [[NSAutoreleasePool alloc] init];
... do stuff here ...
[p drain];
}
Run Code Online (Sandbox Code Playgroud)