Не то, чтобы я защищал небрежность, но разве self.prop = ноль не защищает от непреднамеренного чрезмерного выпуска?
ю, что объявленное свойство генерирует метод доступа, который в некотором смысле является просто синтаксическим сахаром.
Я нашел довольно много людей используютself.property = nil
в ихdealloc
метод.
1) в AppleУправление памятью документ, стр. 23 говорит:
Единственные места, где вы не должны использовать методы доступа для установки переменной экземпляра, это методы init и dealloc.
почему не должен?
2) в яблочномObjective-C 2.0, с74
Объявленные свойства принципиально заменяют объявления методов доступа; когда вы синтезируете свойство, компилятор создает только любые отсутствующие методы доступа. Там нет прямого взаимодействия сdealloc
Метод - свойства не освобождаются автоматически для вас. Объявленные свойства, тем не менее, предоставляют полезный способ для перекрестной проверки реализации вашегоdealloc
Метод: вы можете найти все объявления свойств в вашем заголовочном файле и убедиться, что свойства объекта не отмеченыassign
выпущены, и те, отмеченныеassign
не выпущены
Примечание: как правило, вdealloc
метод вы должныrelease
Переменные экземпляра объекта напрямую (вместо вызова метода доступа и передачиnil
в качестве параметра), как показано в этом примере:
- (void)dealloc { [property release]; [super dealloc]; }
Однако если вы используете современную среду выполнения и синтезируете переменную экземпляра, вы не можете напрямую получить доступ к переменной экземпляра, поэтому вы должны вызвать метод доступа:
- (void)dealloc { [self setProperty:nil]; [super dealloc]; }
Что означает записка?
я нашел[property release];
а также[self setProperty:nil];
обе работают.