在對象之外訪問實(shí)例變量砚嘴,總是應(yīng)該通過屬性禾嫉。
筆者建議,在讀取實(shí)例變量采用直接訪問的形式馅闽,在設(shè)置實(shí)例變量通過屬性飘蚯。
直接訪問實(shí)例變量不經(jīng)過Objective-C的“方法派發(fā)”,所以速度比較快福也;但是直接訪問實(shí)例變量繞過相關(guān)屬性所定義的“內(nèi)存管理語義”局骤。比如:在ARC下直接訪問一個聲明為copy屬性,那么并不會直接拷貝該屬性暴凑,只會保留新值釋放舊值峦甩;直接訪問
實(shí)例變量,不會觸發(fā)“鍵值觀測”现喳。
通過屬性訪問有助于排查與之相關(guān)錯誤凯傲,可以給“獲取“和”設(shè)置方法“新增”斷點(diǎn)“员凝。
注意地方:
1衔憨,初始化方法中應(yīng)該直接訪問實(shí)例變量,因?yàn)樽宇惪赡軙备矊憽霸O(shè)置方法秀仲。但是某些情況必須初始化方法調(diào)用設(shè)置方法:如果待初始化的實(shí)例變量聲明在超類中默色,無法在子類中直接訪問實(shí)例變量球凰,需要調(diào)用”設(shè)置方法“狮腿。
2,”惰性初始化“呕诉,必須通過”獲取方法“來訪問屬性缘厢,否則實(shí)例永遠(yuǎn)不會初始化。
- (NSMutableArray *)myOrderAarray{
if (_myOrderAarray == nil) {
_myOrderAarray = [NSMutableArray array];
}
return _myOrderAarray;
}
3甩挫,在初始化方法已dealloc方法中贴硫,總是應(yīng)該直接通過實(shí)例變量來讀寫數(shù)據(jù)。