应用程序转换为ARC,现在得到关于我的属性的警告

我只是将我的应用程序转换为ARC ,而且它的构build正常,我得到了600条警告,都与我的属性有关。 如:

默认属性“assign”不适合非gc对象

未指定“分配”,“保留”或“复制”属性 – 假定为“分配”

截图警告

Xcode转换我的代码后,这是我的属性看起来像:

 @property (nonatomic) EKEventStore *eventStore; @property (nonatomic) EKCalendar *defaultCalendar; @property (nonatomic) UIActionSheet *currentActionSheet; @property (nonatomic) UILabel *noEventLabel; 

有人谈到需要strong对所有这些。 这是这种情况吗? Xcode忘了添加一些东西?

ARC是正确的。 你不能没有memory management的能力, 你必须说分配,保留(或强者是相同的东西),或弱。

以前,assign是默认的。 但这可能不是你想要的,因为这是最糟糕的select – 这是一个旧式的非ARC弱参考。 你可能需要一个聪明的ARC弱引用(当对象不存在时去nil)或强引用(由ARC为你pipe理的内存)。

对不起,要添加第二个答案,但事实certificate比我想象的更复杂。 事实certificate,你在Xcode 4.3中看到了一个改变的行为(也许是一个bug)。

在Xcode 4.2中,转换器会提供改变(nonatomic, retain)(nonatomic, strong) 。 但在Xcode 4.3中,它提供了将其更改为(nonatomic) ; 我想如果你不想要的话,改变之前retain strong是由你决定的。

另一方面,在Xcode 4.2中, (nonatomic)对于一个综合的属性是绝对不合法的; 在Xcode 4.3中,它不是:你得到一个警告,但它假定你的意思是assign ,所以它不是非法的。

所以,在LLVM 3.1中ARC的工作方式和Xcode 4.3 ARC转换器的相应变化已经发生了变化。

我认为答案是错误的。

在Xcode 4.3中,您会收到警告。 但是,它假定你的意思是保留。 保留是ARC下代码的新默认值。 有人告诉我,Xcode正在解决这个问题。

如果我错了,请纠正我。