第7條:在對(duì)象內(nèi)部盡量直接訪問(wèn)實(shí)例變量
在對(duì)象之外訪問(wèn)實(shí)例變量時(shí)侵状,總是應(yīng)該通過(guò)屬性來(lái)做胁后,讯泣。然而在對(duì)象內(nèi)部訪問(wèn)實(shí)例變量的時(shí)候,建議:在讀取實(shí)例變量的時(shí)候采用直接訪問(wèn)的形式嫁艇,而在設(shè)置實(shí)例變量的時(shí)候通過(guò)屬性(設(shè)置方法)來(lái)做朗伶。這種方案既能提高讀取操作的速度,又能控制對(duì)屬性的寫(xiě)入操作步咪。
*** 該注意的地方 ***
- 一般情況下论皆,在初始化方法中總是應(yīng)該直接訪問(wèn)實(shí)例變量,因?yàn)樽宇?lèi)可能會(huì)“覆蓋”(override)設(shè)置方法歧斟。
- 在某些特殊情況下纯丸,又必須在初始化方法中調(diào)用設(shè)置方法:如果待初始化的實(shí)例變量聲明在超類(lèi)中,而又無(wú)法在子類(lèi)中直接訪問(wèn)此實(shí)例變量的話静袖,那么就需要調(diào)用“設(shè)置方法”了觉鼻。
- 在使用了“延遲初始化”的情況下,必須通過(guò)“獲取方法”來(lái)訪問(wèn)屬性队橙,否則坠陈,實(shí)例變量就永遠(yuǎn)不會(huì)初始化捐康。
// 在“獲取方法”中對(duì)實(shí)例變量執(zhí)行延遲初始化
- (EOCBrain*)brain{
if(!_brain){
_brain = [Brain new];
}
return _brain;
}
若沒(méi)有調(diào)用“獲取方法”就直接訪問(wèn)實(shí)例變量仇矾,則會(huì)看到尚未設(shè)置好的brain。
要點(diǎn)
- 在對(duì)象內(nèi)部讀取數(shù)據(jù)時(shí)解总,應(yīng)該直接通過(guò)實(shí)例變量來(lái)讀贮匕,而寫(xiě)入數(shù)據(jù)時(shí),則應(yīng)通過(guò)屬性來(lái)寫(xiě)花枫。
- 在初始化方法及dealloc方法中刻盐,總是應(yīng)該直接通過(guò)實(shí)例變量來(lái)讀寫(xiě)數(shù)據(jù)。
- 有時(shí)會(huì)使用延遲初始化技術(shù)配置某份數(shù)據(jù)劳翰,這種情況下敦锌,需要通過(guò)屬性(獲取方法)來(lái)讀取數(shù)據(jù)。