我刚刚使用 Xcode 的自动重构将一个旧项目转换为 ARC。
@property (nonatomic, retain) NSMutableArray *cards;
被替换为:
@property (nonatomic) NSMutableArray *cards;
这是有道理的,因为我读到的是“强”是默认状态。但是,以下行在标题中给我错误:
self.cards = [[NSMutableArray alloc] initWithCapacity:54];
通过在原来保留的位置添加 strong
来解决错误:
@property (nonatomic, strong) NSMutableArray *cards;
但是...如果我需要返回并将strong
放入每个保留
的@property 声明...为什么 ARC 重构将它们全部删除?
最佳答案
我遇到了同样的警告并打开了技术支持事件。工程师确认默认值已从“assign”更改为“strong”,以保持 ARC 内的一致性。
他说警告和文档都是错误的,将被修复。在此之前,我会完全避免隐式默认!
明确添加“strong”(如 BJ Homer 建议的那样)是消除警告并兼容的安全方法。但是不要假设默认情况下不保留属性。也始终将“weak”或“assign”放在那里。
编辑:clang documentation现在正式记录此更改。警告已fixed .
编辑 2:Xcode 4.4 显然包含修复。
关于ios - 自动 ARC 转换后 : Assigning retained object to unsafe property; object will be released after assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752525/