我一直在疯狂横冲直撞,阅读各种属性修饰符。我知道assign的行为类似于unsafe_unretained,但是我将用于CGFloat的标准readwrite属性? readwrite(默认)似乎很明显,但我什么时候会使用assign?
答案 0 :(得分:0)
你应该使用赋值给非对象属性 - 任何C类型,如int,float,double,enum,struct。
答案 1 :(得分:0)
readwrite
和assign
不是互斥的,它们用于不同的目的。您可以在不指定的情况下声明它,并将其默认为readwrite
和assign
,这几乎可以肯定是您想要的。
答案 2 :(得分:0)
readwrite
和readonly
只是关于自动创建getter和setter方法的内容。 assign
与内存管理有关。如果将属性设置为assign
,则自动生成的setter看起来像这样:
@property (assign) int number;
- (void)setNumber:(int)newNumber
{
number = newNumber;
}
我不确定它是如何使用ARC的,但是使用assign设置对象指针(例如NSString
)会导致内存泄漏(ivar的原始值在其指针设置为之前未释放新的价值)。
AFAIK assign
是所有属性的默认值,使用强等等覆盖。