Я начинаю лучше понимать управление памятью в Objective-C, но я чего-то не понимаю. Это объявление свойства:
@property (nonatomic, retain)UILabel *myLabel;
и это его невидимый синтезированный сеттер (я думаю):
- (void)setMyLabel:(UILabel *)newValue {
if(myLabel != newValue) {
[myLabel release];
myLabel = [newValue retain];
}
}
Это избавляет вас от всей работы по сохранению и прочему каждый раз, но, скажем, я устанавливаю свое свойство в первый раз, оно еще не выделено, поэтому его счетчик ссылок равен 0, верно? Так что я делаю
UILabel *tempLabel = [[UILabel alloc] init];
self.myLabel = tempLabel;
[tempLabel release];
Я не совсем уверен, что там происходит, когда он ничего не выпускает, но скажем, что свойство уже имеет значение, и мы его устанавливаем. В сеттере сначала он освобождается. Так разве это не заставляет его исчезнуть? Если его счетчик ссылок равен единице, а затем в установщике он освобождается, как он остается, чтобы установить сохраненное новое значение?
Спасибо!!