Ответ
Side Table — это дополнительная структура данных, которая используется Swift Runtime для управления жизненным циклом объектов, особенно при работе со слабыми (weak) и бесхозными (unowned) ссылками.
Основная цель: Безопасное и эффективное управление weak/unowned ссылками без увеличения размера каждого объекта в куче.
Как это работает:
- Изначально объект не имеет Side Table.
- При создании первой
weakилиunownedссылки на объект для него создается Side Table. - 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 при деаллокации объекта, предотвращая висячие указатели, и оптимизирует память, создаваясь только по необходимости.