Вопрос проверяет понимание классической модели управления памятью Objective-C и её связи с ARC.
alloc/init отвечает за создание объекта и начальное владение им. retain/release управляют временем жизни уже созданного объекта. В ARC эти вызовы вставляются автоматически компилятором. Понимание разницы важно для работы с legacy-кодом и анализа утечек.
Objective-C исторически использовал явную модель владения, которую ARC автоматизировал, но не отменил концептуально.
alloc/init — создание объекта и получение на него владения
retain/release — управление временем жизни объекта
Процесс создания объекта состоит из двух шагов:
alloc — выделяет память и создаёт объект
init — инициализирует его состояние
После alloc/init:
вызывающая сторона владеет объектом
retain count равен 1
Эти методы:
retain увеличивает retain count
release уменьшает retain count
Когда retain count становится 0:
вызывается dealloc
память освобождается
В ARC:
нельзя вызывать retain/release напрямую
компилятор сам вставляет эти вызовы
логика владения остаётся прежней
Даже при ARC полезно понимать:
кто владеет объектом
кто обязан “отпустить” ссылку
где может возникнуть retain cycle
Это особенно критично:
в старых SDK
при работе с C-API
при отладке утечек
alloc/init — это создание и первичное владение, retain/release — управление временем жизни. ARC лишь автоматизирует эти правила, но не меняет их суть.