Цель C, Вопрос о выпуске объекта - PullRequest
0 голосов
/ 17 февраля 2011

Если я сделаю что-то вроде

address = [[NSString alloc] initWithData:addressData encoding:NSASCIIStringEncoding];

Тогда я знаю, что мне нужно сделать [освобождение адреса] после того, как я закончу с его использованием. Потому что "alloc" увеличивает количество ссылок на переменную "address", так что мне нужно сделать

 [address release]

Но я не уверен, что мне нужно отпустить, если я сделаю что-то вроде

 NSData *addressData = [NSData dataWithBytes:buf length:address_len];

Я не вижу никакого «alloc» в этом утверждении. Так что мне еще нужно сделать [addressData release] после того, как я закончу с этим?

Заранее спасибо ...

Ответы [ 4 ]

1 голос
/ 17 февраля 2011

Нет, нет. Вам нужно освобождать (или автоматически освобождать) объект, если метод, из которого вы получили объект, является alloc, содержит слово copy или если вы retain редактировали объект.

1 голос
/ 17 февраля 2011

Неа.В этом случае можно смело предположить, что память автоматически освобождена.

Все объяснено в Политика управления памятью

0 голосов
/ 17 февраля 2011

Нет, в вашем втором утверждении нет необходимости снимать.Если вы alloc, copy, new, то вам следует release объекты.

Цель C Управление памятью для Lazy People имеет очень полезную информацию о том, когда release объекты.

0 голосов
/ 17 февраля 2011

Вам не нужно делать релиз во втором примере.Общее правило заключается в том, что вы несете ответственность за выпуск, если вы вызываете alloc, retain или copy.

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