2

假设我有一个属性定义为@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属性声明中的处理它,就像在综合设置器中一样?

4

1 回答 1

5

copy应用于属性的综合 setter 方法,而不是支持实例变量。

由于您绕过initWithName:方法中的属性并直接分配给实例变量,因此copy不会自动应用。

为了遵守复制值的约定,您应该copy在直接为实例变量赋值时显式调用。这些都与 ARC(或 MRC)无关。这都是关于你在财产上定义的合同。

tl;博士 - 是的,您应该调用copy您发布的代码。

于 2016-09-26T02:12:39.160 回答