Соответствуют ли переменные, назначенные свойствам, поведению этого свойства? - PullRequest
1 голос
/ 28 августа 2011

Нужно немного пояснить, как работают свойства Objective-C, когда они «связаны» с переменными экземпляра.Моя путаница проистекает из того, как вы можете установить свойство, равное переменной экземпляра, через директиву @synthesize, например ...

@synthesize someProp = _someIVar;

Теперь, если все мои someProp все равно ...

@property (retain,readonly) SomeClass* someProp

... будет ли это ...

-(id)initWithAutoreleasedInstanceOfSomeClass:(SomeClass*)thingThatIsAutoreleased {
    self = [super init];
    if(self) {
         _someIVar = thingThatIsAutoreleased;
    }
    return self;
}

... вызывать сохранение thingThatIsAutoreleased?

Танки!

1 Ответ

3 голосов
/ 28 августа 2011

, поскольку он доступен только для чтения, у вас не будет установщика, но вы можете установить значение, установив внутреннюю переменную-член. Если вы установили внутреннюю переменную, вам нужно сохранить ее.

_someIVar = [thingy retain];

Обратите внимание, что вы можете позвонить через KVC и получить удержание на срабатывание

[self setValue:myValue forKey:@"someProp"];

Итак, чтобы ответить на ваш первоначальный вопрос, Нет, вы не получите автоматическое сохранение / разблокирование, если вы устанавливаете iVar напрямую. Вы должны сохранить / отпустить, если вы манипулируете iVar.

...