В моей программе Какао действительно простой способ работы с автоматически выпущенными объектами - это просто создать объект таймера внутри делегата приложения, который вызывает следующий метод, например, каждые 10 секунд:
if (pool) {
// Release & drain the current pool to free the memory.
[pool release];
}
// Create a new pool.
pool = [[NSAutoreleasePool alloc] init];
Единственные проблемы, которые я могу себе представить:
1) Если приведенный выше код выполняется в отдельном потоке, объект может быть автоматически освобожден между вызовом освобождения старого пула и созданием нового пула - хотя это кажется маловероятным.
2) Очевидно, что это не так эффективно, потому что пул может быть освобожден, если в нем ничего нет. Аналогичным образом, в 10-секундном промежутке многие объекты могут быть автоматически освобождены, что приведет к значительному росту пула.
Тем не менее, приведенное выше решение кажется довольно подходящим для небольших и простых проектов. Почему никто не использует это? Какова лучшая практика использования NSAutoreleasePools?