Вопрос проверяет более глубокое понимание производительности типов ссылок и их внутренней реализации в Swift.
weak ссылки требуют проверки и автоматического обнуления при деинициализации объекта, что добавляет накладные расходы на хранение в таблице слабых ссылок. unowned — обычный указатель без дополнительной обработки. В runtime это отличается отсутствием регистрации в weak-таблице и лишних проверок.
Механика weak:
При создании weak переменной объект регистрируется в глобальной таблице слабых ссылок.
При деинициализации все связанные weak-ссылки обнуляются.
Механика unowned:
Это просто нерегулируемый указатель без регистрации.
Нет автоматической обнуления или поиска по таблице.
Накладные расходы:
weak: задержка при регистрациях и обнулении, синхронизация доступа к таблице.
unowned: прямой доступ к памяти, без лишних операций.
Реализация в runtime:
Таблица слабых ссылок хранится в структуре SideTable.
При каждом присвоении/обнулении weak код взаимодействует с этой таблицей.
unowned представлен просто raw pointer в объекте.
Вывод:unowned быстрее благодаря меньшему количеству операций и отсутствию поддержки обнуления, но требует уверенности в безопасности доступа.