2

通过阅读ARC 时代的 Property vs. ivar,我了解到__strong当我直接获取或设置strong属性的自动合成关联实例变量但既不会调用自定义 getter 或 setter 也不会触发 KVO 时,ARC 将使用所有权限定符。

但是,如果我这样声明一个属性weak

@property (weak, nonatomic) id <XYZExampleViewDelegate> delegate;
  1. 自动合成的关联实例变量会采用__weak所有权限定符吗?

    例如,将_delegate = delegate(vs self.delegate = delegate) 在我的实现中

    - (id)initWithDelegate:(id <XYZExampleViewDelegate>)delegate
    

    根据__weak资格执行任务?

  2. 对于用 声明的属性copy呢?

4

1 回答 1

4
  1. 是的,属性修饰符weak意味着__weak所有权。属性的关联实例变量(或支持 ivar)是使用属性修饰符隐含的所有权限定符创建的。请参阅关于 ARC 属性声明的 Clang 文档以获取属性修饰符列表以及它们所暗示的所有权限定符。

  2. 属性修饰符copy意味着__strong所有权。因此,当直接设置后备 ivar 时,新的指针被保留但不被复制。要复制它,请使用 setter。

于 2013-10-26T21:36:52.463 回答