为什么 ARC 转换要为 "readonly" 属性添加 "weak" 装饰器?
Why does ARC conversion add "weak" decorator to "readonly" properties?
我只是将一个非常老的项目更新到 ARC(2017 – 我知道)。
我注意到对于 readonly
属性 声明,它添加了一个 weak
装饰器。例如:
// Before conversion to ARC:
@property (nonatomic, readonly) NSString *defaultName;
// After conversion to ARC:
@property (weak, nonatomic, readonly) NSString *defaultName;
有人可以解释为什么要这样做吗?
关于 weak
、strong
和 copy
应用于 readonly
属性 的含义,有一些 SO 问题和答案。一个例子是 this which seems to be directly contradicted by this – 我真的不明白它有什么意义,因为它们似乎只适用于设置 属性 和 readonly
有一个明确的 getter 方法。
在引入ARC之前,默认的内存属性是assign
,因此
@property (nonatomic, readonly) NSString *defaultName;
与
相同
@property (nonatomic, assign, readonly) NSString *defaultName;
这应该可以解释为什么 ARC 迁移使用 weak
。
这在引入 ARC 时发生了变化 - 对于对象类型 strong
/retain
成为默认值。
这个属性无论如何只影响设置器,因此对于 readonly
属性,该属性可以有任何值。
我只是将一个非常老的项目更新到 ARC(2017 – 我知道)。
我注意到对于 readonly
属性 声明,它添加了一个 weak
装饰器。例如:
// Before conversion to ARC:
@property (nonatomic, readonly) NSString *defaultName;
// After conversion to ARC:
@property (weak, nonatomic, readonly) NSString *defaultName;
有人可以解释为什么要这样做吗?
关于 weak
、strong
和 copy
应用于 readonly
属性 的含义,有一些 SO 问题和答案。一个例子是 this which seems to be directly contradicted by this – 我真的不明白它有什么意义,因为它们似乎只适用于设置 属性 和 readonly
有一个明确的 getter 方法。
在引入ARC之前,默认的内存属性是assign
,因此
@property (nonatomic, readonly) NSString *defaultName;
与
相同@property (nonatomic, assign, readonly) NSString *defaultName;
这应该可以解释为什么 ARC 迁移使用 weak
。
这在引入 ARC 时发生了变化 - 对于对象类型 strong
/retain
成为默认值。
这个属性无论如何只影响设置器,因此对于 readonly
属性,该属性可以有任何值。