假设我有一个定义为@property (copy) NSString *name
的属性。
假设我的init
方法定义如下。
-(instancetype) initWithName:(NSString *)name
{
self = [super init];
if (self)
{
_name = [name copy]; //Do I need this copy or will ARC do it automatically?
}
return self;
}
我是否需要注释行中的副本,或者ARC是否会根据属性声明中的copy
处理它,就像在合成的setter中一样?
答案 0 :(得分:5)
copy
适用于属性的合成setter方法,而不是后备实例变量。
由于您绕过initWithName:
方法中的属性并直接分配给实例变量,因此copy
不会自动应用。
为了遵守复制值的合同,当您直接为实例变量赋值时,应该显式调用copy
。这些都与ARC(或MRC)无关。这完全取决于您在物业上定义的合同。
tl; dr - 是的,您应该在发布的代码中致电copy
。