应用程序转换为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正在解决这个问题。
如果我错了,请纠正我。