我刚刚使用Xcode的自动重构将旧项目转换为ARC。
@property (nonatomic, retain) NSMutableArray *cards;
被替换为:
@property (nonatomic) NSMutableArray *cards;
这是有道理的,因为我读到的是“强”是默认状态。但是,以下行给出了标题中的错误:
self.cards = [[NSMutableArray alloc] initWithCapacity:54];
通过将strong
添加回以前保留的位置来解决错误:
@property (nonatomic, strong) NSMutableArray *cards;
但是......如果我需要返回并将strong
放入retain
的每个@property声明中......为什么ARC重构将它们全部删除?
答案 0 :(得分:44)
我遇到了同样的警告并开启了技术支持事件。工程师验证默认值已从“分配”更改为“强”,原因是ARC内的一致性。
他说警告和文件都是错误的并且将被修复。在此之前,我会完全避免隐式默认!
明确添加“强”(正如BJ荷马建议的那样)是一种安静的方法来使警告静音并兼容。但是,不要假设默认情况下不返回属性。总是把“弱”或“分配”放在那里。
编辑:clang documentation现在正式记录了此更改。警告是fixed。
编辑2:Xcode 4.4显然包括修复。
答案 1 :(得分:8)
将nonatomic, retain
转换为nonatomic
似乎有误。我一直看到它转换为nonatomic, strong
。如果您可以按照您看到的方式生成一个简单的项目,那么我建议使用filing a radar。
我假设您正在使用最新的Xcode。