2012-05-08 2 views
1

У меня есть общий вопрос об обозначенном инициализаторе. У меня есть некоторый класс, и оттуда я хочу вызвать инициализатор, но прежде чем я начал заполнять свои @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 не является нулевым и не имеет нулевого объекта в ключах.

ответ

2

Это кажется прекрасным со мной. Я бы использовал безопасный способ (представлен ниже), но в противном случае ваш код будет в порядке.

-(id)initWithTemplate:(NSDictionary*)template 
{ 
    if(self = [self initWithDefault:myDefaultTemplate]) { 

     //now i doing something with my template 

    } 

    return self; 

} 
+0

Но зачем использовать это if()? В этом случае я могу использовать нулевые свойства? – Kuba

+1

Нет, это проверяет, что инициализатор ('initWithDefault:') возвратил значение nil. Нет смысла устанавливать свойства, если 'self' is nil – adig

+0

О, хорошо. Благодаря! – Kuba

0

Ваша реализация прекрасна, учитывая, что переменные _fontColor и _fontSize являются вашими локальными переменными свойств.

Предложение adig - это просто дополнение к тому, что вы уже реализовали. Эта проверка заботится о ситуации, когда ваш объект не получает выделение по какой-либо причине.