我一直在疯狂地阅读各种属性修饰符。我知道assign的作用类似于unsafe_unretained,但对于CGFloat的标准readwrite属性,我会使用什么呢?readwrite(默认值)看起来很明显,但我什么时候使用assign?
readwrite
和assign
不是互斥的,它们有不同的用途。您可能只需声明它而不指定任何一个,并让它同时默认为readwrite
和assign
,这几乎可以肯定是您想要的。
您应该使用assign到非对象属性-任何C类型,如int、float、double、enum、struct。
readwrite
和readonly
只是自动创建的getter和setter方法。assign
与内存管理有关。如果将属性设置为assign
,则自动生成的setter看起来如下:
@property (assign) int number;
- (void)setNumber:(int)newNumber
{
number = newNumber;
}
我不知道ARC的情况如何,但用assign设置对象指针(例如NSString
)会导致内存泄漏(ivar的原始值在指针设置为新值之前没有释放)。
AFAIK assign
是所有属性的默认值,通过使用strong等重写。