Что такое модель Retain-Release (MRC) в Objective-C?

«Что такое модель Retain-Release (MRC) в Objective-C?» — вопрос из категории Управление памятью, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Retain-Release (RR) или Manual Reference Counting (MRC) — это ручная модель управления памятью в Objective-C, где разработчик явно контролирует время жизни объектов с помощью методов retain и release.

Принцип работы:

  1. retain — увеличивает счётчик ссылок объекта на 1, указывая на новую заинтересованность в нём.
  2. release — уменьшает счётчик на 1.
  3. Когда счётчик достигает 0, система немедленно освобождает память объекта.

Пример цикла владения:

// Создание объекта
NSObject *obj = [[NSObject alloc] init]; // retainCount = 1 (от alloc)

// Взятие владения другим кодом
[obj retain]; // retainCount = 2

// Отказ от владения
[obj release]; // retainCount = 1
[obj release]; // retainCount = 0 -> объект деаллоцируется

Почему это важно знать сегодня?

  • Для легаси-кода: Понимание MRC необходимо для поддержки старых проектов.
  • Для Core Foundation: Низкоуровневые C-библиотеки (Core Foundation, Core Graphics) используют аналогичную модель CFRetain/CFRelease.
  • Для понимания ARC: ARC — это автоматизация тех же правил retain/release.