以下內容主要是學習《Effective Objective-C 2.0》所做的筆記,我所購買的原書為英文原版,由於自己英文水平有限,理解可能有疏漏
原書購買地址:亞馬遜
4、Protocols and Categories
Item 23: Use Delegate and Data Source Protocols for Interobject Communication
一些知識點:
(1)一個協議的命名通常是類名之後加一個Delegate。
(2)通常將一個Delegate聲明在類延續類別中。
(3)對於可選屬性的代理方法,在調用時一定要使用自省模式判斷是否被實現了。
(4)代理方法最好包含它自己作為參數的對象,這樣便於判斷代理方法是被哪個對象所調用。
(5)合理的使用_delegateFlags。
要記住的:
(1)使用代理模式為需要瞭解其他對象相關事件的對象提供一個介面。
(2)所定義的代理方法需要包含所有可能的代理方法,並給予可選的屬性。(3)定義Data Source類代理為對象提供擷取其他對象資料的介面。(4)如果需要的話,實現位結構的方法來確定代理中哪些方法被實現。
Item 24: Use Categories to Break Class Implementations into Manageable Segments
要記住的:
(1)使用類別來將一個大類分割為多個易於管理的片段類。(2)建立一個叫做Private的類別,將隱藏實現的私人方法名放在這個類別中,供調用參考。
Item 25: Always Prefix Category Names on Third-Party Classes
一些知識點:
(1)類別中所添加的方法會覆蓋原類中的同名方法和其他類別中的同名方法。
要記住的:
(1)為不是自己編寫的類添加類別一定要記住添加命名首碼。(2)為不是自己編寫的類添加類別方法一定要記住添加命名首碼。
Item 26: Avoid Properties in Categories
要記住的:
(1)確保所有的屬性都被定義在主介面定義中。(2)除非是類擴充屬性,否則最好在類別中選擇讀取方法而不是通過定義屬性來擷取資料。
Item 27: Use the Class-Continuation Category to Hide Implementation Detail
一些知識點:
(1)直接修改某對象的屬性會觸發KVO通知,如果不想觸發KVO可通過某修改方法修改屬性。
要記住的:
(1)通過類擴充類別添加一個類的樣本變數。(2)在類擴充類別中重定義某個屬性的可寫屬性,如果這個屬性在對外介面是唯讀屬性同時需要在內部可寫的話。(3)在類擴充類別中定義私人方法。(4)在類擴充類別中定義私人協議。
Item 28: Use a Protocol to Provide Anonymous Objects
要記住的:
(1)協議可以用於提供不同層級的匿名型別。這些類型可以被歸納為一個實現協議屬性和方法的id類型。(2)使用匿名對象來隱藏某個類型的名稱。(3)使用匿名對象當某類型名稱不是特別重要,而類型中某些定義的特定方法更加重要時。