我打算在iOS中使用参数调用init方法中的默认init方法。像这样:
-(id)init{
self = [super init];
if (self) {
Office = [[NSString alloc]init];
}
return self;
}
-(id)initWithOffice:(NSString*)office{
self = [self init];
if (self) {
self.Office = itemDescription;
}
return self;
}
我的问题是一个好习惯,该怎么办? 我提前感谢您的回复,
答案 0 :(得分:5)
这样可行,但我更喜欢以下内容,因为它没有分配空字符串,只能用初始化字符串替换:
-(id)initWithOffice:(NSString*)office{
self = [super init]; // Not [self init]
if (self) {
Office = office; // OK if using ARC
}
return self;
}
第一种init
方法没有多大意义;我认为只需将Office
保留为nil
就更好了(NSString
对象是不可变的)。正如@ H2CO3所指出的,initWithOffice
方法成为类的指定初始化程序,所有其他init
方法应该使用它来初始化对象。考虑到这一点,第一个init
方法应该是:
-(id)init{
return [self initWithOffice:nil];
}
答案 1 :(得分:1)
创建一个以initWith开头的方法是查看将传递的值。它可以帮助您提醒应该在方法中发送和分配的值。初始化视图时,请考虑初始化有4个变量。最好保留一个单独的initWith方法,您可以在其中初始化视图和您自定义的其他变量。
答案 2 :(得分:0)
我认为你应该改进对象assignning
逻辑,就像那样......
-(id)initWithOffice:(NSString*)office{
self = [self init];
if (self) {
self.Office = [[NSString alloc] initWithString:office]; //Purpose is that //the office object can only be released by the self, non other classes (The owner //of the variable should be self).
}
return self;
}