Структура со ссылкой на класс внутри
Вопрос
Структура Profile содержит свойство avatar: ImageCache (класс). Что произойдёт с avatar при копировании Profile?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Скопируется ссылка: обе копии будут работать с одним кешемправильный ответ
- Объект кеша склонируется вместе со структурой через
copy() - Компилятор потребует сделать
ImageCacheструктурой - Ссылка в копии станет
nil, пока её не присвоят заново
Разбор
Копирование структуры поэлементное: поле-ссылка копируется как ссылка, сам объект остаётся один (плюс увеличивается счётчик ссылок). Это частая ловушка: «структура» с классом внутри теряет семантику значения. Если нужна настоящая независимость, делают copy-on-write вручную через isKnownUniquelyReferenced. Автоматического клонирования нет, и компилятор такую композицию не запрещает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что происходит при присваивании структуры в Swift
Следующий вопрос
Когда выбирать класс, а не структуру
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Как сделать свой copy-on-write
- Existential container: как хранится any Protocol
- Типы значений и ссылочные типы в Swift
- Оператор === в Swift
- Зачем indirect у enum
- Задача на Swift: стек отмены для текстового поля