Где хранится счетчик ссылок (retain count) в управлении памятью Objective-C/Swift?

«Где хранится счетчик ссылок (retain count) в управлении памятью Objective-C/Swift?» — вопрос из категории Управление памятью, который задают на 22% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Счетчик ссылок хранится в заголовке объекта (object header) — внутренней структуре данных, управляемой runtime.

Пример (Objective-C, для иллюстрации):

NSObject *obj = [[NSObject alloc] init];
// retainCount доступен, но его прямое использование не рекомендуется
NSUInteger count = [obj retainCount];

Ключевые моменты:

  1. В Swift счетчик ссылок полностью скрыт от разработчика.
  2. ARC (Automatic Reference Counting) автоматически управляет увеличением и уменьшением этого счетчика.
  3. Не следует полагаться на retainCount в продакшн-коде, так как его значение может быть неточным из-за внутренних оптимизаций runtime.
  4. Для weak (слабых) ссылок используется отдельная структура — таблица слабых ссылок (weak table).