Horton Jackson
Horton Jackson

Reputation: 253

Does an object initialize automatically if it is the synthesized property of another object?

When you have one object as a property of another object in Objective-C, does it automatically initialize when you use @synthesize?

Upvotes: 0

Views: 1054

Answers (4)

Carl Veazey
Carl Veazey

Reputation: 18363

Let's try it:

@interface TypicalObject : NSObject

@property (nonatomic) NSNumber *numberProperty;

@end


@implementation TypicalObject

@synthesize numberProperty;

@end

...

TypicalObject *object = [[TypicalObject alloc] init];
NSLog(@"object.numberProperty = %@", object.numberProperty);

The log statement yields:

object.numberProperty = (null)

So, no, properties do not auto-instantiate. All object instance variables begin as nil, however.

Upvotes: 3

user529758
user529758

Reputation:

does it automatically initialize when you use @synthesize?

Yes, it is initialized to nil (no actual object is allocated, however - this is pointer initialization in the C sense of the word, the init method is not called).

By the way, you don't even have to @synthesize to achieve this behavior - every instance variable, even those which don't have a corresponding @property, are automatically initialized either to nil (in case of objects), NULL (in case of other pointers) or 0 (in case of integers and floating-point numbers) by the Objective-C runtime.

Upvotes: 4

Abdullah Shafique
Abdullah Shafique

Reputation: 6918

You still have to init. Try using lazy initialization:

-(MyPropertyClass*)propertyName {
if(!propertyIvarName) {
    _propertyIvarName = [[MyPropertyClass alloc] init];
}
return propertyIvarName;
}

or init the property in viewdidload

Upvotes: -1

Amin Negm-Awad
Amin Negm-Awad

Reputation: 16650

No. The @synthesize does not know how to initialize it. Simple -init?

You can allocate and initialize it in the -init… of the referring object.

Upvotes: 0

Related Questions