Похожий вопрос редко встречается на собеседованиях, но это не значит, что тему стоит оставлять неизученной. Разберем понятие Боковая таблица или Side Table.
Вкратце, Side Table — механизм, с помощью которого реализуются слабые ссылки. Не каждый объект содержит слабые ссылки, следовательно, и боковые таблицы, иначе это было бы расточительно. Вместо того чтобы напрямую указывать на объект, слабая ссылка указывает на боковую таблицу, которая, в свою очередь указывает на объект.
Такое поведение решает две проблемы:
- Экономия памяти, поскольку память объекта освобождается.
- Наличие безопасного обнуления слабой ссылки.
Боковая таблица — счетчик ссылок + указатель на объект и отображается в Swift Runtime следующим образом:
class HeapObjectSideTableEntry {
std::atomic<HeapObject*> object;
SideTableRefCounts refCounts;
// Операции по увеличению и уменьшению счетчиков ссылок
}
В текущем алгоритме в боковой таблице хранятся счетчики ссылок. Как только мы начинаем ссылаться на объект слабой ссылкой (weak), то создается боковая таблица и объект хранит ссылку на боковую таблицу. Сама боковая таблица также имеет ссылку на объект.
Больше информации:
- Discover Side Tables — Weak Reference Management Concept in Swift
- Память в Swift от 0 до 1
- Что такое ARC (Automatic Reference Counting)?
Выразить благодарность или найти уникальный материал вы можете в boosty.
Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.