通常、init または initWith... メソッドを定義し、次のように便利なコンストラクター内で呼び出します。
@implementation MyClass1 : NSObject
@synthesize n, s;
-(id)init
{
self = [super init];
if (self) {
self.n = 1;
}
return self;
}
-(id)initWithString:(NSString *)s
{
self = [self init];
if (self) {
self.s = s;
}
return self;
}
+(id)myClass
{
return [[self alloc] init];
}
+(id)myClassWithString:(NSString *)s
{
return [[self alloc] initWithString:s];
}
@end
しかし、init または initWith... メソッドを次のように定義しなくても、便利なコンストラクターを定義することは可能だと思います。
@implementation MyClass2
@synthesize n, s;
+(id)myClass
{
MyClass2 *obj = [[self alloc] init];
obj.n = 1;
return obj;
}
+(id)myClassWithString:(NSString *)s
{
MyClass2 *obj = [self myClass];
obj.s = s;
return obj;
}
@end
init メソッドを定義せずに便利なコンストラクターを定義するのは悪い習慣ですか?
悪い習慣である場合、その欠点や問題点を教えていただけますか?