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

我只是使用Xcode的自动重构将旧项目转换为ARC。

@property (nonatomic, retain) NSMutableArray *cards; 

被replace为:

 @property (nonatomic) NSMutableArray *cards; 

这是有道理的,因为我读到的是“强”是默认状态。 但是,下面这行代码给了我标题中的错误:

 self.cards = [[NSMutableArray alloc] initWithCapacity:54]; 

这个错误是通过joinstrong回来解决的:

 @property (nonatomic, strong) NSMutableArray *cards; 

但是,如果我需要返回并strong每个@property声明是retain …为什么ARC重构将它们全部删除?

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

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

明确地join“强”(如BJ荷马build议的)是一种安全的方法,可以使警告消失并保持兼容。 但是不要假设属性默认不会被保留。 总是把“弱”或“分配”在那里。

编辑: 铛文件现在正式文件这个变化。 警告已经修复 。

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

它看起来是错误的,它转换nonatomic, retainnonatomic 。 我一直看到它转换nonatomic, strong 。 如果你能制作一个简单的项目,就像你看到的那样转换,那么我build议你用它来提供一个雷达 。

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