Почему этому свойству нужно 'сохранение'?

Я понял это! Если у кого-то есть такая же проблема, поменяйте ее ...

из

nav {
position: fixed;
width: 100%;
}

в

nav {
position: fixed;
width: 100%;
z-index: 10;
}
5
задан Justicle 18 May 2009 в 07:42
поделиться

1 ответ

Быстрый ответ:

Когда вы устанавливаете:

url = [[coder decodeObjectForKey:@"url"] retain];

, вы , а не , используете @property . Вы вручную устанавливаете значение переменной экземпляра url . Следовательно, вы также должны вручную сохранить значение.

Чтобы установить переменную с использованием синтезированных свойств, вы должны вместо этого вызвать:

[self setUrl:[coder decodeObjectForKey:@"url"]];

или

self.url = [coder decodeObjectForKey:@"url"];

Любая из этих форм будет использовать синтезированные методы и обрабатывают автоматически сохраняют .

Подробности:

В Objective-C ключевые слова @property и @synthesize автоматически создают Методы получения и установки для вас:

@interface MyClass
{
    id someValue;
}
@property (retain) id someValue;
@end

@implementation MyClass
@synthesize someValue;
@end

Эквивалентен:

@interface MyClass
{
    id someValue;
}
- (id)someValue;
- (void)setSomeValue:(id)newValue;
@end

@implementation MyClass
- (id)someValue { return someValue; }
- (void)setSomeValue:(id)newValue
{
    [newValue retain];
    [someValue release];
    someValue = newValue;
}
@end

Это создает важное различие между «внутренней» переменной-членом и свойством с тем же именем.

16
ответ дан 18 December 2019 в 10:48
поделиться