Выбор ответа Middle Типы значений и ссылочные обновлено

Структура со ссылкой на класс внутри

Вопрос

Структура Profile содержит свойство avatar: ImageCache (класс). Что произойдёт с avatar при копировании Profile?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Скопируется ссылка: обе копии будут работать с одним кешем. Копирование структуры поэлементное: поле-ссылка копируется как ссылка, сам объект остаётся один (плюс увеличивается счётчик ссылок).

Варианты ответа

  1. Скопируется ссылка: обе копии будут работать с одним кешемправильный ответ
  2. Объект кеша склонируется вместе со структурой через copy()
  3. Компилятор потребует сделать ImageCache структурой
  4. Ссылка в копии станет nil, пока её не присвоят заново

Разбор

Копирование структуры поэлементное: поле-ссылка копируется как ссылка, сам объект остаётся один (плюс увеличивается счётчик ссылок). Это частая ловушка: «структура» с классом внутри теряет семантику значения. Если нужна настоящая независимость, делают copy-on-write вручную через isKnownUniquelyReferenced. Автоматического клонирования нет, и компилятор такую композицию не запрещает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.