I just converted my app to ARC
, and while it builds fine, I get like 600 warnings, all pertaining to my properties. Such as:
Default propert
ARC is right. You cannot have no memory-management qualifer; you must say assign, retain (or strong which is the same thing), or weak.
Previously, assign was the default. But that is probably not what you want, because is it is the worst possible option - it is an old-style non-ARC weak reference. You either want a smart ARC weak reference (goes to nil when the object goes out of existence) or a strong reference (memory-managed for you by ARC).
Sorry to add a second answer, but this turns out to be more intricate than I thought. It turns out that you're seeing a changed behavior (perhaps a bug?) in Xcode 4.3.
In Xcode 4.2, the converter would have offered to change (nonatomic, retain)
to (nonatomic, strong)
. But in Xcode 4.3, it offers to change it to (nonatomic)
; I guess if you don't want that, changing retain
to strong
is up to you before converting.
On the other hand, in Xcode 4.2, (nonatomic)
alone was absolutely illegal for a synthesized property; in Xcode 4.3, it is not: you get a warning, but it assumes you mean assign
and so it isn't illegal.
So there's been a change in how ARC works in LLVM 3.1 and an accompanying change in the Xcode 4.3 ARC converter.
I think the answers are wrong.
In Xcode 4.3 you get a warning. However, it assumes you mean RETAIN. Retain is the new default for codes under ARC. Someone told me that xcode is fixing this.
Please correct me if I am wrong.