Зачем использовать пул Autorelease?

Я знаю, что в основном методе создан пул авто-релиза, и все объекты, которые получают сообщение авто-релиза, сохраняются в этом пуле и освобождаются, когда пул истощается.

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

Тогда почему и в каких условиях мы должны использовать autoreleasepool?

Документы Apple предполагают, что нам нужно использовать их, когда мы используем потоки, поэтому в начале потока нам нужно создать пул автоматического выпуска, а в конце потока его истощить, но что, если мы не создаем объект автоматического выпуска в полном объеме? затем в этом состоянии также необходимо создать автозапуск в начале потока.

Пожалуйста, убери мою путаницу. Thanx.

1 ответ

Решение

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

Избегать автозапуска - плохой совет, у медали есть две стороны. Использование объектов autorelease'd несет определенную нагрузку (хотя в большинстве сценариев незначительную), которую следует избегать, когда это возможно. Особенно в тех случаях, когда существует несколько выходов из метода или может возникнуть исключение, автоматическое освобождение помогает избежать утечек памяти и делает код чище.

Имейте в виду, что это означает, что ничто в этом потоке не может использовать авто-релиз, включая любые фреймворки, которые вы можете вызвать. Есть ситуации, когда это так, например, в классическом сценарии производитель / потребитель. У вас есть производитель, который создает объекты, отправляет их в циклы выполнения основных потоков и, следовательно, может зарегистрировать их в основных потоках автоматического освобождения.

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

Другие вопросы по тегам