Я начинаю лучше понимать управление памятью в target-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];
Я не совсем уверен, что там происходит, когда он ничего не высвобождает, но говорю, что свойство уже имеет значение, и мы его устанавливаем. В сеттере сначала его выпускают. Так разве это не исчезнет? Если его счетчик ссылок равен единице, а затем в установщике он освобождается, как он остается, чтобы установить оставшееся новое значение?
Спасибо !!