It is my understanding that setting an ivar now retains the object being assigned to it, since setting variables defaults to the strong
qualifier. Because ivars are in the scope of the object they are declared in and strong
retains objects within the scope of the variable, this means the ivars value would never be released while the object containing the ivar is still alive.
Is this correct?
If so, am I right in thinking that there is, in terms of memory management, no difference between a retaining (strong) property and a simple ivar anymore?
If a variable:
Then it is appropriate to declare it as an ivar without a corresponding @property
/@synthesize
, and to refer to it directly within the implementation. It is inline with Encapsulation to declare this ivar in the class implementation file.
// MyClass.h
@interface MyClass : ParentClass
@end
// MyClass.m
@implementation MyClass {
NSString *myString;
}
- (void)myMethod {
myString = @"I'm setting my ivar directly";
}
@end
__strong
by the ARC compiler. nil
if it is an object, or 0
if it is a primitive.