繁体   English   中英

@property copy 与 readonly 结合是否有意义?

[英]Does @property copy in combination with readonly make sense?

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

这确实有道理。 例如,如果您只想在实现中访问属性的设置器:

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

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

@end

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

@interface MyClass ()
@property (nonatomic, copy, readwrite) NSData *data;
@end

请注意,在这种情况下,需要在公共标头中copy, readonly声明!

根据Apple的文档(我在这里为您链接):

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

先前的值被发送一个release消息。

复制是通过调用copy方法来制作的。 此属性仅对必须实现NSCopying协议的对象类型有效。

所以是的,你是对的...... readonly创建了一个 getter 方法,而copy将被有效地忽略,因为没有 setter 方法可以进行赋值。

你是对的,两者兼有是没有意义的。

我认为,如果我在读取时看到这样的属性,我希望收到一个不同的返回对象到 ivar,除非返回的对象被宣传为不可变的。

如果我有

@property (readonly, copy) NSMutableArray* foo;

我这样做:

NSMutableArray* myFoo = [theObject foo];
[myFoo addObject: @"string"];
NSMutableArray* myOtherFoo = [theObject foo];

我希望myOtherFoo中没有myFoo具有的额外字符串。

注意:我还没有验证这一点。

我现在已经检查过了,我的期望是不正确的。 我想我会认为这是一个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM