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:)的可能副本