读写或赋值,我用什么作为CGFloat的属性修饰符

  • 本文关键字:CGFloat 属性 赋值 读写 ios
  • 更新时间 :
  • 英文 :


我一直在疯狂地阅读各种属性修饰符。我知道assign的作用类似于unsafe_unretained,但对于CGFloat的标准readwrite属性,我会使用什么呢?readwrite(默认值)看起来很明显,但我什么时候使用assign?

readwriteassign不是互斥的,它们有不同的用途。您可能只需声明它而不指定任何一个,并让它同时默认为readwriteassign,这几乎可以肯定是您想要的。

您应该使用assign到非对象属性-任何C类型,如int、float、double、enum、struct。

readwritereadonly只是自动创建的getter和setter方法。assign与内存管理有关。如果将属性设置为assign,则自动生成的setter看起来如下:

@property (assign) int number;
- (void)setNumber:(int)newNumber
{
    number = newNumber;
}

我不知道ARC的情况如何,但用assign设置对象指针(例如NSString)会导致内存泄漏(ivar的原始值在指针设置为新值之前没有释放)。

AFAIK assign是所有属性的默认值,通过使用strong等重写。

最新更新