为什么iOs代码使用了如此多的内存和CPU

时间:2018-12-09 01:50:11

标签: ios xcode memory nsmutablearray cpu

我有一些排列/组合代码,它遍历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(在循环之前)时,出现“使用未声明的标识符错误”。

1 个答案:

答案 0 :(得分:0)

您显示的代码是完全伪造的,因此无法猜测您的实际代码做错了什么。但是,如果由于在循环过程中堆积自动释放的对象而使用内存,则将循环内部包裹在@autoreleasepool块中:

while (...) {
    @autoreleasepool {
        // do stuff
    }
}

这个想法是每次通过循环释放临时使用的内存。