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

Ищу небольшое разъяснение о том, как работают свойства 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?

Танки!


person Dfowj    schedule 28.08.2011    source источник


Ответы (1)


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

_someIVar = [thingy retain];

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

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

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

person bryanmac    schedule 28.08.2011