@property(非原子,readonly)和@property内部类扩展之间的区别?

Sun*_*day 4 properties objective-c ios

我有一个Objective-c类"MyClass".在MyClass.m中,我有一个声明CGFloat属性的类扩展:

@interface MyClass ()
@property (nonatomic) CGFloat myFloat;
@end

@implementation MyClass
@synthesize myFloat;
//...
@end
Run Code Online (Sandbox Code Playgroud)

使用readonly关键字声明属性时会发生什么变化(如果有的话)?

@interface MyClass ()
@property (nonatomic, readonly) CGFloat myFloat;
@end

@implementation MyClass
@synthesize myFloat;
//...
@end
Run Code Online (Sandbox Code Playgroud)

也许在第一种情况下,我可以说self.myFloat = 123.0;CGFloat f = self.myFloat;MyClass内部?然后在第二种情况下,readonly关键字阻止分配self.myFloat = 123.0;但允许读取CGFloat f = self.myFloat;

jav*_*log 11

该选项readonly意味着只为此属性声明了getter方法.因此,没有setter,它就不能通过修改myObject.myFloat=0.5f;

如果你没有声明它readonly,read write默认情况下是这样.

通过()扩展名声明属性不会修改访问模式,但会修改范围; 它将是一个"私人"财产.