В документации разработчика сказано:
Если ваше приложение или поток долгое - живые и потенциально генерирующие множество автоматически выпущенных объектов, вам следует периодически сливать и создавать автоматические пулы (как это делает Application Kit в основном потоке); в противном случае автоматически выпущенные объекты накапливаются, а объем используемой памяти увеличивается. Если, однако, ваш отдельный поток не выполняет вызовов Какао, вам не нужно создавать пул автозапуска.
Мне было интересно, как лучше всего это сделать. У меня есть несколько методов, которые, я думаю, подействуют, но не знаю, какой из них «лучший». В настоящее время у меня есть метод, который запускает поток и заставляет его ждать выполнения операций:
- (void)startThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
accessoryRunLoop = [NSRunLoop currentRunLoop];
//Add a dummy port to avoid exiting the thread due to no ports being found
[accessoryRunLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while(accessoryThreadIsRunning)
{
//Keep the thread running until accessoryTheadIsRunning == NO
[accessoryRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
[pool release];
}
Мои варианты, которые я могу придумать, следующие:
1) Добавить счетчик во время (accessoryThreadIsRunning), чтобы каждые 50 или 100 раз он истощал пул автозапуска и создавал новый.
2) Каждый когда я выполняю метод в этом потоке (используя performSelector: onThread :), я могу создать пул с автозапуском, а затем освободить его в конце метода.
3) Сделайте таймер, чтобы пул сливался, а затем создавался периодически.
Я думаю, что вариант 1 является лучшим, но хотел бы знать, есть ли другой способ, которым я должен это делать. Спасибо!