如果对象是另一个对象的合成属性,它是否会自动初始化?

时间:2013-08-11 19:33:18

标签: objective-c initialization synthesize declared-property

当你在Objective-C中有一个对象作为另一个对象的属性时,它会在你使用@synthesize时自动初始化吗?

4 个答案:

答案 0 :(得分:4)

  

使用@synthesize时会自动初始化吗?

是的,它被初始化为nil(没有实际对象已分配,但是 - 这是C语义中的​​指针初始化,init方法是致电)。

顺便说一句,你甚至不需要@synthesize来实现这种行为 - 每个实例变量,即使那些没有相应@property的变量,也会自动初始化为{{ 1}}(在对象的情况下),nil(在其他指针的情况下)或NULL(在整数和浮点数的情况下)由Objective-C运行时。

答案 1 :(得分:3)

我们试一试:

@interface TypicalObject : NSObject

@property (nonatomic) NSNumber *numberProperty;

@end


@implementation TypicalObject

@synthesize numberProperty;

@end

...

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

日志语句产生:

object.numberProperty = (null)

所以,不,属性不会自动实例化。但是,所有对象实例变量都以nil开头。

答案 2 :(得分:0)

没有。 @synthesize不知道如何初始化它。简单-init

您可以在引用对象的-init…中分配和初始化它。

答案 3 :(得分:-1)

你仍然需要初始化。尝试使用延迟初始化:

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

或在viewdidload

中初始化该属性