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

我的问题是这是一个很好的做法,应该怎么做?提前感谢您的回复,

4

3 回答 3

5

这将起作用,但我更喜欢以下内容,因为它不会分配空字符串,只会被初始化字符串替换:

-(id)initWithOffice:(NSString*)office{
    self = [super init];    // Not [self init]
    if (self) {
        Office = office;    // OK if using ARC
    }
    return self;
}

init一种方法没有多大意义;我认为简单地离开更好(对象是不可变的)Office。正如@H2CO3 所指出的,该方法成为该类的指定初始化程序,所有其他方法都应使用它来初始化对象。考虑到这一点,第一种方法应该是:nilNSStringinitWithOfficeinitinit

-(id)init{
    return [self initWithOffice:nil];
}
于 2013-06-12T12:26:51.347 回答
1

创建一个以 initWith 开头的方法是看会传递什么值。它可以帮助您提醒应该在方法中发送和分配哪些值。考虑初始化视图时要初始化 4 个变量。最好保留一个单独的 initWith 方法,您可以在其中初始化您的视图和您自定义的其他变量。

于 2013-06-12T12:32:21.137 回答
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;
}
于 2013-06-12T13:19:19.210 回答