当你在Objective-C中有一个对象作为另一个对象的属性时,它会在你使用@synthesize
时自动初始化吗?
答案 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