objective-c - 为什么ARC转换将 "weak"装饰器添加到 "readonly"属性?

标签 objective-c automatic-ref-counting

我刚刚将一个非常旧的项目更新到 ARC(2017 年 - 我知道)。

我注意到,对于readonly属性声明,它添加了一个weak装饰器。例如:

// Before conversion to ARC:
@property (nonatomic, readonly) NSString *defaultName;

// After conversion to ARC:
@property (weak, nonatomic, readonly) NSString *defaultName;

有人可以解释一下为什么这样做吗?

有一些关于weakstrongcopy应用于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/

相关文章:

objective-c - ARC IBOutlet 存储类型 iOS 限制

iphone - 创建一个新的 NSString 实例,其保留计数为 3

c++ - Objective-C 集成 C 库并传递字符串值 - ARC 错误

ios - Swift ARC 和 block

swift - 如何手动清零内存?

objective-c - MBProgressHUD 阻塞界面直到操作完成

ios - [_UIWebViewScrollViewDelegateForwarder scrollViewWasRemoved :]: unrecognized selector sent to instance

ios - 作为 C 指针类型的 Objective-C 类

iphone - iOS5 ARC 如何将 iVar 标记为保留?

ios - 裁剪 UIImage 的部分以获得新的纵横比并缩小尺寸