Objective c 实现自定义访问器方法时是否覆盖声明的属性属性?

Objective c 实现自定义访问器方法时是否覆盖声明的属性属性?,objective-c,memory-management,declared-property,Objective C,Memory Management,Declared Property,假设我这样声明一个属性 @property (nonatomic, copy) NSObject *property; 然后我创建了一个自定义setter方法 - (void) setProperty:(NSObject *)property { _property = property; // Some more code here } 编译器是否解释copy关键字,使此setter函数等效于此 _property = [property copy]; 还是我有责任这样

假设我这样声明一个属性

@property (nonatomic, copy) NSObject *property;
然后我创建了一个自定义setter方法

- (void) setProperty:(NSObject *)property
{
    _property = property;

    // Some more code here
}
编译器是否解释
copy
关键字,使此setter函数等效于此

_property = [property copy];
还是我有责任这样写,以便关键字与行为匹配?

来自 (重点加上):

  • copy
    意味着
    \u strong
    所有权,以及setter上复制语义的通常行为
属性的指定所有权保留在其元数据中,但 否则,除非属性是 合成。 如果合成了属性,则关联的实例变量为 实例变量,该变量可能由 @综合声明。如果关联的实例变量已存在 存在,则其所有权资格必须等于 财产;否则,将使用该变量创建实例变量 所有权资格

因此,在您的情况下,对于自定义setter,将属性声明为“copy”意味着 实例变量
\u property
\u strong
而不是其他变量

您有责任让设定者实际制作副本,例如:

- (void) setProperty:(NSObject *)property
{
    _property = [property copy];
    // Some more code here
}
从中的“4.1.1属性声明” (重点加上):

  • copy
    意味着
    \u strong
    所有权,以及setter上复制语义的通常行为
属性的指定所有权保留在其元数据中,但 否则,除非属性是 合成。 如果合成了属性,则关联的实例变量为 实例变量,该变量可能由 @综合声明。如果关联的实例变量已存在 存在,则其所有权资格必须等于 财产;否则,将使用该变量创建实例变量 所有权资格

因此,在您的情况下,对于自定义setter,将属性声明为“copy”意味着 实例变量
\u property
\u strong
而不是其他变量

您有责任让设定者实际制作副本,例如:

- (void) setProperty:(NSObject *)property
{
    _property = [property copy];
    // Some more code here
}

这是你的责任这是你的责任