If I declare a property strong, like so:
@property (strong, nonatomic) UIView *iVar;
When I'm setting it, does it matter if I do
iVar = ...
orself.iVar = ...
? It seems that with ARC, they do the same thing.If I only declare the instance variable (not the @property), e.g.,
BOOL selected
, does that mean it's inferred to be__unsafe_unretained
(since there's no property specifying it to be strong), or must I explicitly specify that?
It seems like I may have answered my own questions above in answering ARC: How to release static variable?, but I'm still slightly confused on the above questions.
From a memory management perspective, using
ivar = ...
orself.property = ...
(note: there's no such thing asself.ivar
) are the same. However, usingivar = ...
doesn't invoke the setter whileself.property = ...
does. This has 3 important ramifications, in no particular order:nonatomic
, then access to the underlying ivar will not take the lock and you will be breaking the atomicity implications.As for only declaring the ivar, it has the same memory management semantics as declaring a local variable. This is documented in section 4.4 of the Objective-C Automatic Reference Counting document, but basically, if it's an object, it will be inferred to be
__strong
.