Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @property(非原子,只读)和类扩展内的@property之间的区别?_Objective C_Ios_Properties - Fatal编程技术网

Objective c @property(非原子,只读)和类扩展内的@property之间的区别?

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

我有一个目标c类“MyClass”。在MyClass.m中,我有一个类扩展,它声明了一个
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(尽管这没有多大意义)

在类别中声明属性只是定义属性在该类别中的范围