Вопрос проверяет углубленное понимание внутреннего устройства ARC и хранения метаданных объектов.
Side table используется для хранения дополнительной информации об объекте, например weak-ссылок. Она создается только при необходимости. Side table удаляется, когда объект деинициализируется и больше не нужен. После освобождения объекта вся связанная с ним информация также очищается.
Side table — это внутренняя структура runtime, о которой редко задумываются, но она важна для работы ARC.
Side table — это вспомогательная структура, в которой runtime хранит дополнительную информацию об объекте, если она не помещается в сам объект.
Обычно туда попадает:
информация о weak ссылках
дополнительные счетчики
runtime-метаданные
Side table создается не всегда.
Она появляется, если:
у объекта есть weak ссылки
требуется дополнительное управление памятью
Если объект не имеет weak-ссылок, side table может вообще не использоваться.
Процесс выглядит так:
Счетчик сильных ссылок объекта падает до нуля
Вызывается deinit
Runtime освобождает объект
Все связанные weak ссылки зануляются
Side table очищается и удаляется
Side table не живет дольше объекта
Утечка side table означает утечку объекта
Понимание этого помогает при анализе сложных утечек
Side table удаляется вместе с объектом при его деинициализации и существует только столько, сколько объект реально живет в памяти.