Чем отличаются механизмы управления памятью retain/release и autorelease в Objective-C?

В Objective-C управление памятью традиционно основано на подсчёте ссылок (reference counting). Основные механизмы — это retain, release и autorelease.

Короткий ответ

Что ответить на собеседовании

В Objective-C управление памятью традиционно основано на подсчёте ссылок (reference counting). Основные механизмы — это retain, release и autorelease.

Подробный разбор

Ответ с пояснениями

В Objective-C управление памятью традиционно основано на подсчёте ссылок (reference counting). Основные механизмы — это retain, release и autorelease.

  • retain увеличивает счётчик ссылок объекта, показывая, что вы владеете этим объектом и хотите его сохранить в памяти.
  • release уменьшает счётчик ссылок, сигнализируя, что вы больше не нуждаетесь в объекте. Когда счётчик достигает нуля, объект удаляется.
  • autorelease помещает объект в специальный пул автосброса (autorelease pool), который автоматически вызовет release на объекте позже, обычно в конце текущего цикла обработки событий.

Пример:

NSObject *obj = [[NSObject alloc] init]; // счётчик = 1
[obj retain]; // счётчик = 2
[obj release]; // счётчик = 1
[obj autorelease]; // объект будет освобождён позже, когда пул автосброса очистится

Таким образом, retain/release — это явное управление жизненным циклом объекта, а autorelease — отложенное управление, позволяющее временно передать владение объектом, чтобы избежать немедленного освобождения и упростить код.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее