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
Objective c 为什么要同时为属性指定只读和赋值?_Objective C - Fatal编程技术网

Objective c 为什么要同时为属性指定只读和赋值?

Objective c 为什么要同时为属性指定只读和赋值?,objective-c,Objective C,如果assign是一个setter,但属性是readonly,那么它不会进行任何设置,那么为什么要使用assign 我从“我知道为什么您想要一个公共只读属性”,然后将其私有化为readwrite,但是为什么不从公共@接口中省略赋值,只将其包含在类扩展中?如果您只保留(非原子),如果多次声明@属性,编译器将自动将第二个参数设置为赋值(通常是因为在头文件中声明了公共只读属性,在.m中声明了匿名类别中的读写属性),内存管理方案必须匹配 因此,如果你的.m中有这个: @property (assign,

如果
assign
是一个setter,但属性是
readonly
,那么它不会进行任何设置,那么为什么要使用
assign


我从“我知道为什么您想要一个公共只读属性”,然后将其私有化为readwrite,但是为什么不从公共
@接口
中省略
赋值
,只将其包含在类扩展中?

如果您只保留
(非原子)
,如果多次声明
@属性
,编译器将自动将第二个参数设置为
赋值

(通常是因为在头文件中声明了公共
只读
属性,在.m中声明了匿名类别中的
读写
属性),内存管理方案必须匹配

因此,如果你的.m中有这个:

@property (assign, readwrite) NSObject *foo;
然后,您需要在标题中添加此项,并且
分配
是必需的:

@property (assign, readonly) NSObject *foo;

当编译器设置为
只读时,为什么要假定
赋值
或任何其他setter?实际上,我找到了另一个很好的答案:链接页面中的示例提供了内部(仅类)使用的getter和setter,而
readonly
参数对于外部使用是有效的。我之前不理解您的问题。另一个有用的例子是@protocol将属性定义为readonly,但您的实现希望是readwrite:)的可能副本