<a >Effective Objective C 2.0:編寫高質量iOS與OS X代碼的52個有效方法</a>
第 6 條: 理解"屬性"這一概念###
要點:####
- 可以用@property 語法來定義對象中所封裝的數據.
- 通過"特質"來指定存儲數據所需的正確語義.
- 在設置屬性所對應的實例變量時,一定要遵從該屬性所聲明的語義.
- 開發ios程序時應該使用nonatomic 屬性, 因為atomic 屬性會嚴重影響性能.
第 7 條: 在對象內部盡量直接訪問實例變量###
要點:####
- 在對象內部讀取數據時,應該直接通過實例變量來讀,而寫入數據時,則應通過屬性來寫.
- 在初始化方法及 dealloc 方法中,總是應該直接通過實例變量來讀寫數據.
- 有時會使用惰性初始化技術配置某份數據,這種情況下,需要通過屬性來讀取數據.
第 8 條: 理解"對象等同性" 這一概念###
要點:####
- 若想檢測對象的等同性,請提供 "isEqual:" 與hash 方法.
- 相同的對象必須具有相同的哈希碼,但是兩個哈希碼相同的對象卻未必相同.
- 不要盲目地逐個檢測每條屬性, 而是應該依照具體需求來制定檢測方案.
- 編寫hash 方法時,應該使用計算速度快而且哈希碼碰撞幾率低的算法.
第 9 條: 以"類族模式"隱藏實現細節###
要點:####
- 類族模式可以把實現細節隱藏在一套簡單的公共接口后面.
- 系統框架中經常使用類族.
- 從類族的公共抽象基類中繼承子類時要當心,若有開發文檔,則應首先閱讀.
第 10 條: 在既有類中使用關聯對象存放自定義數據###
要點:####
- 可以通過"關聯對象"機制來把兩個對象連起來.
- 定義關聯對象時可指定內存管理語義,用以模仿定義屬性時所采用的"擁有關系"與"非擁有關系".
3.只有在其它做法不可行時才應選用關聯對象,因為這種做法通常會引入難于查找的BUG.
第 11 條: 理解objc_msgSend的作用###
要點:####
- 消息由接收者,選擇子及參數構成.給某對象"發送消息"也就相當于在該對象上"調用方法".
- 發給某對象的全部消息都要由"動態消息派發系統"來處理,該系統會查出對應的方法,并執行其代碼.
第 12 條: 理解消息轉發機制###
要點:####
- 若對象無法響應某個選擇子,則進入消息轉發流程.
- 通過運行期的動態方法解析功能,我們可以在需要用到某個方法時再將其加入類中.
- 對象可以把其無法解讀的某些選擇子轉交給其他對象來處理.
- 經過上述兩步之后,如果還是沒辦法處理選擇子,那就啟動完整的消息轉發機制.
第 13 條: 用"方法調配技術"調試"黑盒方法"###
要點:####
- 在運行期,可以向類中新增或替換選擇子所對應的方法實現.
- 使用另一份實現來替換原有的方法實現,這道工序叫做"方法調配",開發都常用此技術向原有實現中添加新功能.
- 一般來說,只有調試程序的時候才需要在運行期修改方法實現,這種做法不宜濫用.
第 14 條: 理解"類對象"的用意###
要點:####
- 每個實例都有一個指向Class對象的指針,用以表明其類型,而這些Class對象則構成了類的繼承體系.
- 如果對象類型無法在編譯期確定,那么就應該使用類型信息查詢方法來探知.
- 盡量使用類型信息查詢方法來確定對象類型,而不是直接比較類對象,因為某些對象可能實現了消息轉發功能.