六:理解對“屬性”這一概念
可以用@property語法來定義對象中的所封裝的數(shù)據(jù)
通過"特質(zhì)"來制定存儲數(shù)據(jù)所需的正確語義
在設(shè)置屬性所對應(yīng)的實例變量時,一定要遵從該屬性所聲明的語義。
開發(fā)iOS程序時應(yīng)該使用nonatomic屬性,因為atmoic屬性會嚴(yán)重影響性能
七:在對象內(nèi)部盡量直接訪問實例變量
在對象內(nèi)部讀取數(shù)據(jù)時,應(yīng)該直接通過實例變量來讀,而寫入數(shù)據(jù)時,則應(yīng)通過屬性來寫。
在初始化方法及dealloc方法中,總是應(yīng)該直接通過實例變量來讀寫數(shù)據(jù)
有時會使用惰性初始化技術(shù)配置某份數(shù)據(jù),這種情況下,需要用過屬性來讀取數(shù)據(jù)。
八:理解"對象等同性"這一概念
若想檢測對象的等同性,請?zhí)峁?isEqual:"和"hash"方法
相同的對象必須具有相同的哈希碼,但是兩個哈希碼相同的對象卻未必相同。
不要盲目地逐個檢測每條屬性,而是應(yīng)該依照具體需求來制定檢測方案
編寫hash方法時,應(yīng)該使用計算速度快而且哈希碼碰撞幾率低的算法
九:以"類族模式"隱藏實現(xiàn)細(xì)節(jié)
類族模式可以把實現(xiàn)細(xì)節(jié)隱藏在一套簡單的公共接口后面
系統(tǒng)框架中經(jīng)常使用類族
從類族的公共抽象基類中繼承子類時要當(dāng)心,若有開發(fā)文檔,則應(yīng)首先閱讀
10:在既有類中使用關(guān)聯(lián)對象存放自定義數(shù)據(jù)
可以通過"關(guān)聯(lián)對象"機(jī)制來把兩個對象連起來
定義關(guān)聯(lián)對象時可指定內(nèi)存管理語義,用以模仿定義屬性時所采用的“擁有關(guān)系”與非擁有關(guān)系"
只有在其他做法不可行時才應(yīng)選用關(guān)聯(lián)對象,因為這種做法通常會引入難于查找的bug。