0

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

4

4 回答 4

4

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

是的,它被初始化为nil(但是没有分配实际的对象- 这是 C 意义上的指针初始化,调用该init方法)。

顺便说一句,您甚至不必@synthesize实现此行为 - 每个实例变量,即使是那些没有对应@property的 ,都会自动初始化为nil(在对象的情况下)、NULL(在其他指针的情况下)或0(在整数和浮点数的情况下)由 Objective-C 运行时。

于 2013-08-11T19:49:23.410 回答
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

于 2013-08-11T19:50:10.850 回答
0
于 2013-08-11T19:41:42.117 回答
-1

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

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

或初始化属性viewdidload

于 2013-08-11T19:36:07.353 回答