У меня есть утечка с этим утверждением? - PullRequest
3 голосов
/ 11 февраля 2009

Заявление:

//Pass the copy onto the child controller
self.childController.theFoodFacilityCopy = [self.theFoodFacility copy];

Мое свойство установлено на:

@property (nonatomic, retain) FoodFacility *theFoodFacilityCopy;

Причина, по которой я думаю, что у меня утечка, заключается в том, что copy сохраняет значение, а затем мое свойство синтаксиса точки также сохраняет значение. Вдвойне сохраняется.

Как правильно написать вышеприведенное утверждение?

Ответы [ 4 ]

9 голосов
/ 11 февраля 2009

да, у вас там есть утечка.

SomeClass *someObj = [self.theFoodFacility copy];
self.childController.theFoodFacilityCopy = someObj;
[someObj release];

Это также отражает рекомендуемый подход для инициализации объекта:

SomeClass *someObj = [[SomeClass alloc] init];
self.someProperty = someObj;
[someObj release];

В обоих случаях первая строка возвращает объекты со счетом сохранения 1, и после этого вы обрабатываете их идентично.

6 голосов
/ 12 февраля 2009

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

0 голосов
/ 12 февраля 2009

В чем преимущество этого по сравнению с установкой свойства для копирования?

@property (nonatomic, copy) FoodFacility *theFoodFacilityCopy;
0 голосов
/ 12 февраля 2009

Вы правы. Самый чистый способ - что-то вроде

id temp = [self.theFoodFacitlity copy];
self.childController.theFoodFacilityCopy = temp;
[temp release]

Вы хотите прочитать сайт Apple по управлению памятью , пока эти правила не станут второй натурой.

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