Я знаю, что объявленное свойство генерирует метод доступа, который в некотором роде является просто синтаксическим сахаром.
Я обнаружил, что довольно много людей используют 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];
работают.