В чем разница между: @property (readwrite, assign) int iVar; @property (readwrite, retain) int iVar; @property (readwrite) int iVar;
Сеттер для @property (readwrite,assign) sometype aProperty;
семантически эквивалентен
-(void) setAProperty: (sometype) newValue
{
ivar = newValue;
}
Вышесказанное более или менее то, что вы получите, если вы положите
@asynthesize aProperty = ivar;
в вашей реализации.
Сеттер для @property (readwrite,retain) sometype aProperty;
семантически эквивалентен
-(void) setAProperty: (sometype) newValue
{
[newValue retain];
[ivar release];
ivar = newValue;
}
Очевидно, что нет смысла сохранять или освобождать int, поэтому sometype должен быть либо id
, либо SomeObjectiveCClass*
Сеттер для @property (readwrite,copy) sometype aProperty;
семантически эквивалентен
-(void) setAProperty: (sometype) newValue
{
sometype aCopy = [newValue copy];
[ivar release];
ivar = aCopy;
}
В этом случае не только должен быть sometype классом C, но он должен отвечать на -copyWithZone:
(или, эквивалентно, реализовывать NSCopying
).
Если вы опускаете сохранение или назначение или копирование, по умолчанию назначается.
Кстати, я упростил вышесказанное, не учитывая блокировку, возникающую из-за того, что свойства также не указывают nonatomic
.