Почему код iOs использует так много памяти и процессора - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть некоторый код перестановки / комбинации, который перебирает 20 объектов по 5 штук за раз.Когда список удовлетворяет некоторым критериям, я печатаю объекты, которые составляют этот список.Излишне говорить, что петля довольно большая.Я помещаю все комбинации в NSMutableArray внутри цикла.Как только объекты были добавлены и прошли / не прошли тест, я удаляю все объекты из массива.(Код Psuedo ниже).

-(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];
   } 
}

Во время мониторинга сеанса отладки процессор и память заполнены.Я уверен, что зацикливание вступает в игру.Я не верю, что перераспределяю массив 'комбинаций' для каждой итерации.Если да, могу ли я что-то сделать, чтобы убедиться, что он правильно освобожден или освобожден до следующей итерации цикла?

Когда я добавляю @autorelease (который находится перед циклом), я получаю"ошибка необъявленного идентификатора".

1 Ответ

0 голосов
/ 10 декабря 2018

Код, который вы показали, полностью поддельный, поэтому невозможно угадать, что ваш настоящий код делает неправильно.Но если вы используете память, потому что вы накапливаете автоматически освобожденные объекты во время цикла, оберните внутреннюю часть цикла в блок @autoreleasepool:

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

Идея состоит в том, чтобы освобождать временно используемую память каждый разчерез петлю.

...