Ответ
release — это метод экземпляра в Objective-C, используемый в модели Manual Reference Counting (MRC). Он уменьшает счетчик владения (retain count) объекта на единицу. Когда счетчик достигает нуля, система немедленно освобождает память объекта (деаллоцирует его).
Принцип работы:
- Методы
alloc,new,copy,mutableCopyсоздают объект с retain count = 1. [obj retain]увеличивает счетчик на 1.[obj release]уменьшает счетчик на 1.
Пример MRC:
// Создание объекта. Retain count = 1.
NSObject *myObject = [[NSObject alloc] init];
// Увеличиваем счетчик. Retain count = 2.
[myObject retain];
// Уменьшаем счетчик. Retain count = 1. Объект еще жив.
[myObject release];
// Уменьшаем счетчик до 0. Объект деаллоцируется.
[myObject release];
// Дальнейшее обращение к myObject вызовет краш (EXC_BAD_ACCESS).
Критически важные правила:
- Баланс: Каждому
retain,alloc,copy,mutableCopyдолжен соответствоватьrelease. - Не вызывать
releaseдля авторелизных объектов: Например, для объектов, возвращаемых сконвенциональными методами (не начинающимися сalloc/new/copy). - ARC: В современных проектах с Automatic Reference Counting (ARC) компилятор автоматически вставляет вызовы
retainиrelease, поэтому их явное использование запрещено и вызовет ошибку компиляции.