当您在 Objective-C 中将一个对象作为另一个对象的属性时,它会在您使用时自动初始化@synthesize
吗?
问问题
883 次
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 回答