这是上一个问题的分支,这是不好的做法(使用属性来设置iVars)?
// Designated initializer 001
- (id)initWithName:(NSString *)newName andType:(NSString *)newType {
self = [super init];
if(self) {
[self setName:newName];
[self setType:newType];
}
return self;
}
或者我应该使用......
// Designated initializer 002
- (id)initWithName:(NSString *)newName andType:(NSString *)newType {
self = [super init];
if(self) {
name = [newName retain];
type = [newType retain];
}
return self;
}
我一直在使用版本001,但我们一直认为使用属性来访问init或dealloc中的iVars是不好的做法。
编辑:将retain
添加到版本002
加里。
答案 0 :(得分:3)
是的,Apple discourages在init或dealloc中使用访问器,因为它们除了设置实例变量之外还有副作用。这些在未初始化或被破坏的物体中显然是不可取的。
来自文档的确切引用:“你不应该使用访问器方法来设置实例变量的唯一地方是init方法和dealloc。”