【发布时间】:2019-05-10 08:28:00
【问题描述】:
我有一些排列/组合代码,它遍历 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(在循环之前)时,我得到一个“使用未声明的标识符错误”。
【问题讨论】:
-
自动释放池怎么样?
-
谢谢,马特。我尝试了自动释放池,但在代码的其他部分中将对象添加到数组时导致了一些额外的问题。
-
这是我对自动释放所做的:@autorelease{ NSArray *objectsList = [[NSArray alloc] initWithObjects: @“Lisa”,@“Kevin”,...nil]; }
-
好吧,如果你只显示伪代码,你只会得到伪建议。展示你的真实代码,展示你尝试了什么以及它导致了什么问题,并询问相关问题。自动释放池是如何防止内存在循环期间堆积。
-
在循环中放置
@autoreleasepool是没有意义的。循环是问题所在。您需要将@autoreleasepoolinside 放在循环中,以便每次通过循环时都会调用它。
标签: ios xcode memory nsmutablearray cpu