На что указывает weak ссылка, хранящаяся в Side Table?

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

Ответ

Weak ссылка из Side Table указывает на сам объект (heap-объект), за которым она наблюдает.

Механизм работы:

  1. Когда создается первый weak reference на объект, для него создается отдельная структура — Side Table.
  2. Side Table хранит:
    • Счетчик слабых ссылок (weak ref count).
    • Указатель на исходный объект.
  3. Сама weak переменная содержит указатель не напрямую на объект, а на эту Side Table.

Что происходит при освобождении объекта?

  1. Когда счетчик сильных ссылок (strong ref count) объекта достигает нуля, объект деаллоцируется.
  2. Side Table обнуляет свой указатель на этот объект.
  3. Все weak переменные, ссылающиеся на Side Table, начинают возвращать nil.

Пример и результат:

class MyClass {}
var strongRef: MyClass? = MyClass() // Strong ref count = 1
weak var weakRef = strongRef        // Создается Side Table

strongRef = nil // Strong ref count = 0 -> объект уничтожается
print(weakRef) // nil (Side Table обнулила указатель)

Итог: Side Table — это посредник, который позволяет безопасно обнулять weak ссылки, предотвращая висячие указатели.