【发布时间】:2015-08-14 08:49:14
【问题描述】:
我正在尝试了解在 Objective-c 中声明为副本和只读的属性,特别是我是否必须自己进行副本。在我的初始化方法中。证据表明我这样做:
@interface A : NSObject
@property(nonatomic, copy, readonly) NSData *test;
- (instancetype)initWithData:(NSData *)data;
@end
@implementation A
- (instancetype)initWithData:(NSData *)data {
if ((self = [super init]) != nil) {
_test = data;
}
return self;
}
@end
int main (void) {
NSData *d1 = [NSMutableData dataWithBytes:"1234" length:5];
A *a = [[A alloc] initWithData:d1];
NSLog(@"%lx", (unsigned long)d1);
NSLog(@"%lx", (unsigned long)a.test);
return 0;
}
我原以为我可以在我的 init 方法中执行self.test = data,但这是不允许的,因为它是只读的(并非意外)。当然,self.test = [data copy] 保证了两个不同的对象。
那么:有没有办法在objective-c中创建一个只读属性来复制传入的值,或者它是否足以成为一种极端情况,这种组合是毫无意义的,无论如何我都必须手动复制自己?
【问题讨论】:
标签: objective-c properties automatic-ref-counting