私は次のことをしたい:
// I want to do this! :D
- (instancetype) init
{
return [self initWithVal1:[NSDecimalNumber zero] val2:MyEnumDefault];
}
- (instancetype) initWithVal1:(NSDecimalNumber*)val1 val2:(MyEnum)val2
{
return [self initWithVal1:val1 val2:val2 val3:12];
}
- (instancetype) initWithVal1:(NSDecimalNumber*)val1 val2:(MyEnum)val2 val3:(NSInteger)val3
{
if (self = [super init])
{
_prop1 = val1;
_prop2 = val2;
_prop3 = val3;
}
return self;
}
しかし、私が呼び出したとき[self initWithVal1:[NSDecimalNumber zero]
、self
まだ初期化されていないことがわかっています。ただし、例でこれを示す itnernet の周りの例を見てきました。これは安全ですか、それとも以下のように毎回初期化する必要がありますか?
// I don't want to do this... :(
- (instancetype) init
{
if (self = [super init])
{
_prop1 = [NSDecimalNumber zero];
_prop2 = MyEnumDefault;
_prop3 = 12;
}
return self;
}
- (instancetype) initWithVal1:(NSDecimalNumber*)val1 val2:(MyEnum)val2
{
if (self = [super init])
{
_prop1 = val1;
_prop2 = val2;
_prop3 = 12;
}
return self;
}
- (instancetype) initWithVal1:(NSDecimalNumber*)val1 val2:(MyEnum)val2 val3:(NSInteger)val3
{
if (self = [super init])
{
_prop1 = val1;
_prop2 = val2;
_prop3 = val3;
}
return self;
}
_prop3 = 12
のようにコードを複製し、後でコードを変更する必要がある場合に不一致が生じる可能性があるため、このアプローチは好きではありません。