Что означает сохранение сообщения? - PullRequest
3 голосов
/ 10 ноября 2009

В объективе-c вы видите

[object retain] ;

Что означает отправка retain сообщения объекту и зачем вы его используете?

Ответы [ 3 ]

11 голосов
/ 10 ноября 2009

Как правило, он используется для получения «владения» объектом, т. Е. Вызывая функцию 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];
6 голосов
/ 10 ноября 2009

Увеличивает количество ссылок на рассматриваемый объект.

См. этот пост для более подробной информации о подсчете ссылок в Цели C.

3 голосов
/ 10 ноября 2009

Прочитайте Руководство по управлению памятью Apple для полного и довольно простого объяснения всего, что связано с управлением памятью Какао. Я настоятельно рекомендую прочитать это, а не в зависимости от сообщения о переполнении стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...