3
這是從前一個問題的分支,這是不好的做法(使用該屬性來設置iVars)?在init中使用屬性來訪問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的是不好的做法。
編輯:新增retain
到002版本
加里。
你有一個很高的代表和許多徽章,所以我相信你 – Justin 2010-11-03 20:04:44
謝謝查克,所以你會選擇版本002? – fuzzygoat 2010-11-03 20:10:27
@fuzzygoat:理想情況下,這些應該是'copy'屬性,並且init方法應該複製而不是保留(因爲它們是字符串),否則,是的,我會使用版本2. – Chuck 2010-11-03 20:17:32