我对指定的初始化程序有一般性的疑问。我有一个类,从那里我想调用一个初始化程序,但在我开始用传递数据填充我的@properties之前我想让数据默认。例如:
-(id)initWithDefault:(NSDictionary*)defaultTemplate
{
self = [super init];
_fontColor = [defaultTemplate objectForKey:@"color"];
_fontSize = [[defaultTemplate objectForKey:@"size"] intValue];
return self;
}
-(id)initWithTemplate:(NSDictionary*)template
{
self = [self initWithDefault:myDefaultTemplate];
//now i doing something with my template
return self;
}
这是一种防止null @properties的方法吗?这是正确使用指定的初始化程序吗?当然,您可以假设myDefaultTemplates不为null,并且键中没有null对象。
答案 0 :(得分:2)
这对我来说似乎很好。我会使用安全的方式(如下所示),否则你的代码就可以了。
-(id)initWithTemplate:(NSDictionary*)template
{
if(self = [self initWithDefault:myDefaultTemplate]) {
//now i doing something with my template
}
return self;
}
答案 1 :(得分:0)
由于_fontColor和_fontSize变量是属性的局部变量,因此您的实现完全没问题。
adig的建议只是对您已经实施的内容进行了改进。当您的对象因任何原因未被分配时,此检查会处理这种情况。