【问题标题】:ARC: property vs ivar: copy, weakARC:属性与 ivar:复制,弱
【发布时间】:2013-10-26 21:36:52
【问题描述】:

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

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

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

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

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

    根据__weak 资格执行分配?

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

【问题讨论】:

    标签: objective-c properties automatic-ref-counting weak-references ivar


    【解决方案1】:
    1. 是的,属性修饰符weak 暗示__weak 所有权。属性的关联实例变量(或支持 ivar)是使用属性修饰符隐含的所有权限定符创建的。请参阅Clang documentation on ARC property declarations 了解属性修饰符列表以及它们所暗示的所有权限定符。

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

    【讨论】:

    • 对于 (2),这样想:copy + weak 没有意义。运行时将创建对象的副本,将其分配给weak 实例变量,然后立即释放它,因为复制的对象没有强引用...
    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 2012-08-19
    • 2012-02-24
    • 2023-03-18
    • 2012-11-30
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多