我打算用init参数调用init方法中的默认init方法

时间:2013-06-12 12:19:03

标签: ios iphone objective-c-2.0

我打算在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;
}

我的问题是一个好习惯,该怎么办? 我提前感谢您的回复,

3 个答案:

答案 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;
}