自动ARC转换后:将保留的对象分配给不安全的属性;对象将在分配后释放

时间:2012-03-17 18:15:09

标签: ios xcode automatic-ref-counting

我刚刚使用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重构将它们全部删除?

2 个答案:

答案 0 :(得分:44)

我遇到了同样的警告并开启了技术支持事件。工程师验证默认值已从“分配”更改为“强”,原因是ARC内的一致性。

他说警告和文件都是错误的并且将被修复。在此之前,我会完全避免隐式默认

明确添加“强”(正如BJ荷马建议的那样)是一种安静的方法来使警告静音并兼容。但是,不要假设默认情况下不返回属性。总是把“弱”或“分配”放在那里。

编辑:clang documentation现在正式记录了此更改。警告是fixed

编辑2:Xcode 4.4显然包括修复。

答案 1 :(得分:8)

nonatomic, retain转换为nonatomic似乎有误。我一直看到它转换为nonatomic, strong。如果您可以按照您看到的方式生成一个简单的项目,那么我建议使用filing a radar

我假设您正在使用最新的Xcode。