From a memory management perspective, using ivar = ...
or self.property = ...
(note: there's no such thing as self.ivar
) are the same. However, using ivar = ...
doesn't invoke the setter while self.property = ...
does. This has 3 important ramifications, in no particular order:
- If the property is not marked
nonatomic
, then access to the underlying ivar will not take the lock and you will be breaking the atomicity implications.
- If the property is overridden, either by you or by a subclass, the overridden setter will not be invoked.
- KVO notifications will not be sent.
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
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…