Вопрос проверяет понимание того, как единая модель управления памятью работает на границе Swift и Objective-C.
ARC в Swift и Objective-C — это один и тот же механизм на уровне рантайма. Swift-код и Objective-C-код обмениваются объектами через общий reference counting. Компиляторы обоих языков автоматически вставляют retain и release, согласованные между собой. Благодаря этому объекты корректно живут и освобождаются независимо от языка, в котором они созданы.
Swift не изолирован от Objective-C — он построен так, чтобы работать поверх того же ARC, что и Objective-C.
ARC (Automatic Reference Counting) — механизм управления памятью, основанный на подсчёте сильных ссылок, общий для Swift и Objective-C.
Когда Swift-код взаимодействует с Objective-C:
используется один и тот же heap
применяется единый reference counting
retain / release работают одинаково
Объект:
созданный в Objective-C
может быть удержан Swift-кодом
и наоборот.
Важно понимать, что:
ARC — это не runtime-система
ARC — это логика, встроенная в компилятор
Компилятор Swift:
добавляет retain/release для Swift-объектов
добавляет retain/release при вызове Objective-C API
Компилятор Objective-C:
делает то же самое со своей стороны
При передаче объектов между языками:
Swift автоматически учитывает ownership
аннотации вроде __bridge, __bridge_retained скрыты за интерфейсом
Разработчику в Swift:
почти никогда не нужно думать о ручном управлении памятью
но важно понимать семантику strong / weak / unowned
На границе языков могут возникать:
retain cycle через делегаты
утечки из-за неправильных ownership-аннотаций в ObjC
неожиданные lifetime у long-living объектов
ARC в Swift и Objective-C — это единая система. Swift просто делает её более безопасной и строгой, но под капотом используется тот же reference counting.