我刚刚将一个非常旧的项目更新到 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<时的含义的问题和答案
属性。一个例子是 this这似乎与 this 直接矛盾– 我真的不明白它有什么意义,因为它们似乎只适用于设置属性,并且 readonly
有一个显式的 getter 方法。
最佳答案
在引入ARC之前,默认的内存属性是分配
,因此
@property (nonatomic, readonly) NSString *defaultName;
与
相同@property (nonatomic, assign, readonly) NSString *defaultName;
这应该可以解释为什么 ARC 迁移使用weak
。
引入 ARC 后,情况发生了变化 - 对于对象类型,strong
/retain
成为默认值。
无论如何,此属性仅影响 setter ,因此对于 readonly
属性,该属性可以具有任何值。
关于objective-c - 为什么ARC转换将 "weak"装饰器添加到 "readonly"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45506862/