Делает "self.propery = [[SomeClass alloc] init];"утечка памяти? - PullRequest
0 голосов
/ 23 августа 2010

Безопасно ли в Objective-C писать

self.propery = [[SomeClass alloc] init];

вместо

SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];

или утечка памяти первой формы?

Ответы [ 4 ]

5 голосов
/ 23 августа 2010

Первый пример просачивается, если вы не укажете пользовательский установщик свойств. Вы можете использовать:

self.propery = [[[SomeClass alloc] init] autorelease];

Вместо.

2 голосов
/ 23 августа 2010

Зависит от того, как определяется свойство. Если это определено с помощью retain или copy, тогда ваш первый пример будет утечкой.

0 голосов
/ 23 августа 2010

Не имеет значения, определено ли ваше свойство как сохранение, копирование или присвоение.Когда вы создаете локальный экземпляр класса с [[SomeClass alloc] init], вы несете ответственность за его освобождение в той области, в которой он был создан.

Ответ Кевина правильный.Если вам не хочется создавать, настраивать, выпускать - вы можете использовать авто-релиз.Основной пул автообновления время от времени очищается, вы не будете использовать эту память на протяжении всего срока службы приложения.

Стоит отметить, что непредсказуемый характер пулов автозапуска означает, что вы не можетеэта память будет освобождена.При работе на платформе с ограниченной памятью, такой как iPhone, следует избегать использования автоматического выпуска, за исключением мест, где это необходимо.

0 голосов
/ 23 августа 2010

Первая утечка.

Вы должны отпустить или автоматически выпустить все, что вам [[ alloc] init], когда оно вам больше не нужно.

См. Это руководство .

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