Что такое Side Table в управлении памятью Swift?

«Что такое Side Table в управлении памятью Swift?» — вопрос из категории Управление памятью, который задают на 38% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Side Table — это дополнительная структура данных, которая используется Swift Runtime для управления жизненным циклом объектов, особенно при работе со слабыми (weak) и бесхозными (unowned) ссылками.

Основная цель: Безопасное и эффективное управление weak/unowned ссылками без увеличения размера каждого объекта в куче.

Как это работает:

  1. Изначально объект не имеет Side Table.
  2. При создании первой weak или unowned ссылки на объект для него создается Side Table.
  3. Side Table хранит:
    • Счетчик слабых ссылок.
    • Указатель на исходный объект.
    • Дополнительные флаги состояния.

Пример:

class MyClass {}
var strongRef: MyClass? = MyClass() // Объект в памяти, Side Table еще нет.
weak var weakRef = strongRef // Создается Side Table для управления weak-ссылкой.
strongRef = nil // Объект деаллоцируется. Side Table обнуляет weakRef до nil.
print(weakRef) // nil

Почему это важно: Side Table позволяет weak ссылкам автоматически становиться nil при деаллокации объекта, предотвращая висячие указатели, и оптимизирует память, создаваясь только по необходимости.