Ответ
Это методы ручного управления памятью (MRC) в Objective-C.
retain / release
retain— увеличивает счетчик ссылок (retain count) объекта на 1.release— уменьшает счетчик ссылок на 1. Когда счетчик достигает 0, память объекта немедленно освобождается.- Прямое и предсказуемое управление временем жизни.
// MRC (Manual Reference Counting)
NSObject *obj = [[NSObject alloc] init]; // retainCount = 1
[obj retain]; // retainCount = 2
[obj release]; // retainCount = 1
[obj release]; // retainCount = 0 -> объект деаллоцирован
autorelease
autorelease— добавляет объект в текущийautoreleasepool, откладывая отправкуrelease.releaseбудет вызван автоматически, когда пул будет дренирован (обычно в конце цикла runloop).- Удобно для возврата временных объектов из методов.
- (NSString *)generateName {
// Объект будет освобожден позже, когда дренируется autoreleasepool
return [[[NSString alloc] initWithFormat:@"Name_%d", 1] autorelease];
}
Практическое значение: С появлением ARC (Automatic Reference Counting) необходимость вручную вызывать эти методы отпала. Однако понимание важно для работы с legacy-кодом, Core Foundation (где используется CFRetain/CFRelease) и для низкоуровневой оптимизации с использованием @autoreleasepool.