Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : value, type, reference

В каких случаях массив хранит объект, а в каких — ссылку?

Вопрос проверяет понимание различий между value type и reference type и того, как это отражается на хранении данных в коллекциях.

Короткий ответ

Массив хранит значение, если его элементы являются value type, и ссылку, если элементы — reference type. Для структур и enum в массиве лежат сами значения. Для классов в массиве лежат ссылки на объекты в куче. Это влияет на поведение при изменении элементов и на производительность. Массив при этом всегда остаётся value type.

Длинный ответ

Поведение массива напрямую зависит не от самого массива, а от типа элементов, которые в нём хранятся.

Когда массив хранит значение

Если элементы массива — value type:

  • struct

  • enum

  • базовые типы (Int, Bool, Double)

то в буфере массива хранятся сами значения.

Особенности:

  • при копировании массива копируются значения (через Copy-on-Write)

  • изменение элемента не влияет на другие копии массива

  • поведение полностью предсказуемо

Пример:

struct Point {
    var x: Int
}

var a = [Point(x: 1)]
var b = a
b[0].x = 10
// a[0].x всё ещё 1

Когда массив хранит ссылку

Если элементы массива — reference type (class):

  • в буфере массива лежат ссылки на объекты

  • сами объекты живут в heap

Особенности:

  • копирование массива копирует ссылки

  • изменение объекта видно через все ссылки

  • семантика элементов — ссылочная

Пример:

class User {
    var name: String
    init(name: String) { self.name = name }
}

var a = [User(name: "Alex")]
var b = a
b[0].name = "Bob"
// a[0].name тоже "Bob"

Почему это важно понимать

От этого зависит:

  • ожидаемое поведение при изменениях

  • вероятность побочных эффектов

  • архитектурные решения

  • работа с потоками

Вывод

Массив всегда value type, но его элементы могут быть как значениями, так и ссылками. Это ключевое отличие, которое часто становится источником неожиданных багов.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Swift

    Swift

Ключевые слова

#value

#type

#reference

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.