Что такое side table
Что проверяют
Знаете ли вы, как устроен подсчёт ссылок в рантайме, а не только правило «слабая ссылка не удерживает объект». Вопрос обычно идёт следом за разговором про ARC и проверяет, откуда вообще берётся обнуление слабых ссылок в момент смерти объекта.
Как отвечать
Side table это боковая структура рантайма, связанная с объектом и хранящая то, что нет смысла держать в самом объекте: список слабых ссылок на него, счётчик слабых ссылок, а при переполнении и счётчик сильных.
В рантайме Objective-C хранилища глобальные: массив таблиц, нужная выбирается по адресу объекта, внутри лежат хеш-таблица слабых ссылок и таблица счётчиков, доступ закрыт своим замком. Разбиение по адресу нужно, чтобы операции над разными объектами не толкались на одном замке.
В Swift счётчики лежат прямо в заголовке объекта, а боковая таблица создаётся лениво: при первой слабой ссылке или при переполнении встроенного счётчика. После этого поле заголовка начинает указывать на неё.
Главное следствие: слабая ссылка не читает объект напрямую, она ходит в боковую таблицу. Когда объект освобождается, записи о нём там обнуляются, поэтому чтение слабой ссылки либо отдаёт живой объект, либо ничего, но никогда мусор.
Отсюда же двухэтапное освобождение. Как только сильных ссылок не осталось, вызывается deinit и память объекта может быть отдана, но боковая таблица живёт, пока существует хотя бы одна слабая ссылка на него.
Где спотыкаются
Отвечают про вспомогательную таблицу в базе данных и связь по внешнему ключу. Термин здесь из рантайма, к SQL и к слоям хранения он отношения не имеет, и такой ответ сразу показывает, что человек услышал вопрос впервые.
Говорят, что слабая и бесхозная ссылки отличаются только падением при обращении. Разница ещё и в цене: бесхозная не требует боковой таблицы и читается без синхронизации, слабая требует и того, и другого.
Считают, что таблица есть у каждого объекта. Она создаётся лениво и только по необходимости, поэтому у объектов без слабых ссылок её нет, и подсчёт ссылок не платит памятью за всех ради нужд единиц.