Автолизинг какао в петлях - PullRequest
0 голосов
/ 12 мая 2009

(я прочитал руководство по управлению памятью Apple, а также другую справку по управлению памятью здесь, но все еще не понимаю, что делать дальше)

Что я должен сделать для управления памятью с помощью удобных методов в цикле? Нужно ли явно создавать пул авто-релиза, а затем сливать его? Или все это автоматически?

, например

for (i=0; i<numFilePaths; i++) {
    // ...
    NSString *componentString = [someString lastPathComponent];
    // ...
}

В этом примере я неоднократно получаю новую строку из lastPathComponent. Какое-то время я игнорирую плохие манеры в одной и той же вещи, как мне справляться с этой ситуацией управления памятью?

'componentString' вообще не сохраняется, он имеет срок жизни только в цикле и используется просто для сравнения с другими строками. Спасибо за любую помощь.

1 Ответ

6 голосов
/ 12 мая 2009

Автозапуск пула очищается только после завершения цикла выполнения, обычно в конце метода, когда управление возвращается пользователю. Если вы обнаружите, что проходите через цикл много раз, что приведет к созданию большого количества автоматически выпущенных объектов (которые будут накапливаться в памяти до завершения вашего метода), вы можете создать локальный пул автоматического выпуска и опустошить его самостоятельно. 1001 *

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

for (i=0; i<10000; i++) {
  NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
  NSString *aString = [NSString string];
  [pool drain];
}

Вероятно, производительность снизится, если вы создадите и освободите слишком много пулов, поэтому вы можете захотеть проверить определенное количество итераций (скажем, каждые 100 циклов или около того) для создания и выпуска пулов. Нет заданного номера, поэтому вам придется немного поиграться.

ОБНОВЛЕНИЕ: обновлено с [pool release] до [pool drain] для обеспечения будущей совместимости со сборкой мусора по рекомендации Марка Шарбонно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...