Why doesn't this common property initialization scheme risk failure when the synthesized setter tries to release the undefined myArray object? Or are property objects automatically initialized to nil and I don't need to be doing this at all?
@interface myClass : NSObject {     NSArray* myArray; } @property (nonatomic, retain) NSArray* myArray; @end  @implementation myClass @synthesize myArray; -(id)init {     if ( self = [super init] ) {         self.myArray = nil;     }     return self; }  ... 
                Object instance variables in Objective-C are initialized to nil by default. Furthermore, messaging nil is allowed (unlike calling a method on null in function-calling languages like Java, C# or C++). The result of a message to nil is nil, this calling [nil release]; is just nil, not an exception.
On a side note, it's best practice to assign/call instance variables directly in -init and -dealloc methods:
-(id)init {     if ( self = [super init] ) {         myArray = nil;     }     return self; }  - (void)dealloc {     [myArray release];     [super dealloc]; } 
                        As others have stated, the instance variable is already initialised to nil. 
Additionally, as per Apple's documentation, instance variables should be set directly in an init method, as the getter/setter methods of a class (or subclass thereof) may rely on a fully initialised instance.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With