我有一些排列/组合代码,它遍历20个对象,每次5个。当列表满足某些条件时,我将打印组成该列表的对象。不用说,循环很大。我将所有组合放入循环内的NSMutableArray中。添加对象并通过/失败测试后,我将从阵列中删除所有对象。 (下面的伪代码)。
-(void)CreateCombinations
{
NSMutableArray *Combinations = [[NSMutableArray alloc] init];
@autoreleasepool {
NSArray *objectsList = [[NSArray alloc] initWithObjects:
@“Lisa”,@“Kevin”,…nil];
} //autorelease pool
while(!Finished)
{
Combinations = [self getNextCombo: Combinations]
if (goodCombination)
[self printCombos:Combinations]
[Combinations removeAllObject];
}
}
在监视调试会话时,CPU和内存已满。我确信循环正在发挥作用。我不相信我会为每个迭代重新分配“组合”数组。如果是的话,我可以做些什么来确保在下一次循环迭代之前将其正确释放或释放?
当我添加@autorelease(在循环之前)时,出现“使用未声明的标识符错误”。
答案 0 :(得分:0)
您显示的代码是完全伪造的,因此无法猜测您的实际代码做错了什么。但是,如果由于在循环过程中堆积自动释放的对象而使用内存,则将循环内部包裹在@autoreleasepool
块中:
while (...) {
@autoreleasepool {
// do stuff
}
}
这个想法是每次通过循环释放临时使用的内存。