выпустить все, что у вас есть @property сохранить @synthesize для? - PullRequest
5 голосов
/ 05 января 2011

Я начал стучать по своему приложению и углубился, и оно работает отлично, но я думаю, что некоторые вещи стали немного дикими.

Для каждого @property (nonatomic, retain), который я затем создаю @synthesize, для меня нужно иметь [переменную release] в методе dealloc - это правильно?

Даже если это такIBOutlet?

Ответы [ 3 ]

11 голосов
/ 05 января 2011

Да. Вы объявили право собственности на объект, сделав его retain свойством, что означает, что вы должны отказаться от права собственности, освободив его.

4 голосов
/ 05 января 2011

Кроме того, если у вас есть оставшееся значение IBOutlet, вы должны разблокировать его и установить значение nil в -viewDidUnload.Это позволяет объекту освобождать свои выходы при удалении представления, особенно в ответ на предупреждение о нехватке памяти.Установив для ивара значение nil в этом методе, вы избежите риска двойного освобождения ивара, если впоследствии объект будет освобожден.

1 голос
/ 05 января 2011

Да. Если вы сохраняете собственность, вы несете ответственность за ее освобождение.

Объявленные свойства принципиально заменяют объявления методов доступа; когда вы синтезируете свойство, компилятор создает только любые отсутствующие методы доступа. Нет прямого взаимодействия с методом dealloc - свойства не освобождаются автоматически.

Заявленные свойства

Обычно вы делаете это в методе dealloc.

- (void)dealloc {
    [property release];
    [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...