Лучший способ периодически очищать пул автозапуска в длительном фоновом потоке?

В документации разработчика сказано:

Если ваше приложение или поток долгое - живые и потенциально генерирующие множество автоматически выпущенных объектов, вам следует периодически сливать и создавать автоматические пулы (как это делает 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 является лучшим, но хотел бы знать, есть ли другой способ, которым я должен это делать. Спасибо!

5
задан Ned 27 September 2010 в 19:17
поделиться