Objective c @property(非原子,只读)和类扩展内的@property之间的区别?
我有一个目标c类“MyClass”。在MyClass.m中,我有一个类扩展,它声明了一个Objective c @property(非原子,只读)和类扩展内的@property之间的区别?,objective-c,ios,properties,Objective C,Ios,Properties,我有一个目标c类“MyClass”。在MyClass.m中,我有一个类扩展,它声明了一个CGFloat属性: @interface MyClass () @property (nonatomic) CGFloat myFloat; @end @implementation MyClass @synthesize myFloat; //... @end 当使用readonly关键字声明属性时,有什么变化(如果有的话) @interface MyClass () @property (nonat
CGFloat
属性:
@interface MyClass ()
@property (nonatomic) CGFloat myFloat;
@end
@implementation MyClass
@synthesize myFloat;
//...
@end
当使用readonly
关键字声明属性时,有什么变化(如果有的话)
@interface MyClass ()
@property (nonatomic, readonly) CGFloat myFloat;
@end
@implementation MyClass
@synthesize myFloat;
//...
@end
也许在第一种情况下,我可以说self.myFloat=123.0代码>和
CGFloat=self.myFloat代码>在MyClass中?然后在第二种情况下,readonly
关键字阻止赋值self.myFloat=123.0
但允许读取CGFloat=self.myFloat代码>您是对的,将您的属性声明为“只读”
您告诉编译器不要自动生成setter方法,因此self.myFloat=123.0
将是非法的(除非您手动创建该方法)。选项readonly
表示仅为该属性声明getter方法。因此,如果没有setter,就不能通过myObject.myFloat=0.5f修改它代码>
如果您没有声明它为只读
,默认情况下它是读写
通过()扩展声明属性不会修改访问模式,但会修改范围;它将是一个“私有”属性。@synthetic
使用@property
定义为iVar生成适当的getter/setter。当您指定只读时
,不会生成设置器。这并不是严格执行的,因为如果您愿意,您可以编写自己的setter(尽管这没有多大意义)
在类别中声明属性只是定义属性在该类别中的范围