Есть ли проблема с использованием self.property = nil в dealloc?

Я знаю, что объявленное свойство генерирует метод доступа, который в некотором роде является просто синтаксическим сахаром.

Я обнаружил, что довольно много людей используют self.property = nil в своем методе dealloc .

1) В документе Apple Memory Management , p23 говорится:

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

почему бы и нет?

2) В Apple Objective-C 2.0 , p74

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

Примечание: Обычно в методе dealloc вы должны освободить переменные экземпляра объекта напрямую (вместо того, чтобы вызывать метод доступа set и передавать nil в качестве параметра), как показано в этом примере:

- (void)dealloc { [property release]; [super dealloc]; }

Однако, если вы используете современную среду выполнения и синтезируете переменную экземпляра, вы не можете получить доступ к переменной экземпляра напрямую, поэтому вы должны вызвать метод доступа:

- (void)dealloc { [self setProperty:nil]; [super dealloc]; }

Что означает примечание?

Я обнаружил, что [освобождение собственности]; и [self setProperty: nil]; работают.

9
задан walkytalky 11 April 2011 в 01:52
поделиться