Подтвердить что ты не робот

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

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

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

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

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

Пожалуйста, очистите мое замешательство. Thanx.

4b9b3361

Ответ 1

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

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

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

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