@property复制与readonly有意义吗?

znq*_*znq 30 objective-c ios

如果我理解正确的话,copy强制setter创建传入的对象的副本.但是,如果我一起使用它readonly,就不会有setter.所以我的假设是正确的,结合@property (copy, readonly)没有任何意义,或者我错过了什么?

Eri*_*ner 29

它确实有意义.例如,如果您只想在实现中访问属性的setter:

@interface MyClass : NSObject
@property (nonatomic, copy, readonly) NSData *data;

- (id)initWithData:(NSData *)data;

@end
Run Code Online (Sandbox Code Playgroud)

并在.m文件的类继续中:

@interface MyClass ()
@property (nonatomic, copy, readwrite) NSData *data;
@end
Run Code Online (Sandbox Code Playgroud)

请注意,copy, readonly在这种情况下,公共标题中的声明是必需的!

  • 如果子类想要在其自己的实现中将超类中定义的`readonly`属性重新声明为`readwrite`,则同样适用. (5认同)

Mic*_*ann 12

根据Apple的文档(我在这里链接到你):

copy
指定应使用对象的副本进行分配.

先前的值会发送一条release消息.

通过调用copy方法进行复制.此属性仅对必须实现NSCopying协议的对象类型有效.

所以是的,你是正确的... readonly创建一个getter方法并且copy会被有效地忽略,因为没有setter方法可以进行赋值.