2012-05-08 16 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がnullではなく、キーにnullオブジェクトがないと仮定できます。

答えて

2

これは私にとってうまくいくようです。私は安全な方法を使用します(下記参照)が、そうでなければあなたのコードは問題ありません。

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

     //now i doing something with my template 

    } 

    return self; 

} 
+0

しかし、なぜこれを使うのですか?この場合、nullプロパティを使用できますか? – Kuba

+1

いいえ、イニシャライザ( 'initWithDefault:')がnil以外の値を返すかどうかをチェックします。 'self'がnilならばプロパティを設定することに意味がありません – adig

+0

ああ、大丈夫です。ありがとう! – Kuba

0

あなたの実装では、_fontColorと_fontSize変数は、プロパティのあなたのローカル変数であるという事実を考えると、完全に罰金です。

adigさんの提案は、既に実装している機能を強化したものに過ぎません。このチェックは、何らかの理由でオブジェクトが割り当てられない状況を処理します。

関連する問題