第7条:在对象内部尽量直接访问实例变量
在对象之外访问实例变量时,总是应该通过属性来做,。然而在对象内部访问实例变量的时候,建议:在读取实例变量的时候采用直接访问的形式,而在设置实例变量的时候通过属性(设置方法)来做。这种方案既能提高读取操作的速度,又能控制对属性的写入操作。
*** 该注意的地方 ***
- 一般情况下,在初始化方法中总是应该直接访问实例变量,因为子类可能会“覆盖”(override)设置方法。
- 在某些特殊情况下,又必须在初始化方法中调用设置方法:如果待初始化的实例变量声明在超类中,而又无法在子类中直接访问此实例变量的话,那么就需要调用“设置方法”了。
- 在使用了“延迟初始化”的情况下,必须通过“获取方法”来访问属性,否则,实例变量就永远不会初始化。
// 在“获取方法”中对实例变量执行延迟初始化
- (EOCBrain*)brain{
if(!_brain){
_brain = [Brain new];
}
return _brain;
}
若没有调用“获取方法”就直接访问实例变量,则会看到尚未设置好的brain。
要点
- 在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。
- 在初始化方法及dealloc方法中,总是应该直接通过实例变量来读写数据。
- 有时会使用延迟初始化技术配置某份数据,这种情况下,需要通过属性(获取方法)来读取数据。