在访问变量时,我倾向于在我的 Objective C 代码中经常使用self.property,因为我知道这会使用 getter/setter 方法(显式编码或自动生成)。
另一位编码人员最近告诉我,最好在整个代码中使用_property 。但我的理解是_property实际上只用于 init 和 dealloc 方法。
今天我在一些使用initWithCoder的代码中发现了一个错误。我在 initWithCoder 方法中使用_property并且不得不将其更改为self.property。这是在设置 NSData 对象时。这是原始代码:
@property (nonatomic, strong) NSData *data;
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (!self) {
return nil;
}
_data = [decoder decodeObjectForKey:@"data"];
return self;
}
我不得不把它改成这个,让它工作:
@property (nonatomic, strong) NSData *data;
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (!self) {
return nil;
}
self.data = [decoder decodeObjectForKey:@"data"];
return self;
}
我的问题是 - 为什么这里的initWithCoder是例外?如果普遍认为最好在 init 方法中使用_property,那么为什么initWithCoder会有所不同?
现在看来,一般规则是:
使用 self.property,除非在 init/dealloc 方法中,应该使用 _property(除了 initWithCoder,应该使用 self.property)。
这个对吗?