Как правило, он используется для получения «владения» объектом, т. Е. Вызывая функцию retain, вызывающая сторона берет на себя ответственность за управление памятью этого объекта.
Два самых распространенных способа использования верхней части моей шляпы:
1 - вы инициируете объект с помощью управляемых методов автоматической памяти, но хотите, чтобы он зависал некоторое время: someObject = [[someArray objectAtIndex:someIndex] retain]
, без сохранения объект будет автоматически освобожден в какое-то время, когда вы не управляете.
2 - вы инициируете объект, передавая ему somePointer, выполняете управление памятью и освобождаете вызовы для somePointer, и теперь somePointer будет зависать до тех пор, пока только что инициированный объект не освободит его, вызовы объекта сохраняются для somePointer и теперь владеют им. .
-(id) initWithSomePointer:(NSObject *)somePointer_{
if(self = [super init])
somePointer = [somePointer_ retain];
return self;
}
..
..
[somePointer release];