通常情況下,您可以定義init或initWith ...方法,並呼籲他們方便的構造像這裏面:定義和使用方便的構造函數而不定義init方法是不好的做法?
@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方法嗎?
如果不好的做法,你能告訴我的缺點或問題嗎?
我認爲這是一個約定的問題。一般來說,遵循慣例是一種很好的商業慣例。只要確保遵循所有權和保留/釋放的命名約定,當您不使用ARC時,這當然更重要。順便說一句,你在「更好」的構造函數中調用'init'。:) –