內省是物件揭示自己作為乙個執行時物件的詳細資訊的一種能力。這些詳細資訊包括物件在繼承樹上的位置,物件是否遵循特定的協議,以及是否可以響應特定的訊息。nsobject協議和類定義了很多內省方法,用於查詢執行時資訊,以便根據物件的特徵進行識別。
明智地使用內省可以使物件導向的程式更加高效和強壯。它有助於避免錯誤地進行訊息派發、錯誤地假設物件相等、以及類似的問題。
nsobject協議宣告了幾個方法,用於確定物件在類層次中的位置。這些方法在不同粒度上進行操作,比如class和superclass例項方法分別返回代表類和超類的class物件。使用這些方法需要將乙個class物件和另乙個進行對比。
nsobject還有兩個功能更加強大的內省方法,即respondstoselector:和conformstoprotocol:。這兩個方法分別告訴您乙個物件是否實現特定的方法,以及是否遵循指定的正式協議(即該物件是否採納了該協議,且實現了該協議的所有方法)。
hash和isequal:方法雖然不是嚴格的內省方法,但是可以發揮類似的作用,是進行物件的識別和比較時不可或缺的執行時工具。它們並不向執行環境查詢物件資訊,而是依賴於具體類的比較邏輯。hash和isequal:方法都在nsobject協議中宣告,且彼此關係緊密。實現hash方法必須返回乙個整型數,作為雜湊表結構中的表位址。兩個物件相等(isequal:方法的判斷結果)意味著它們有相同的雜湊值。如果您的物件可能被包含在象nsset這樣的集合中,則需要定義hash方法,並確保該方法在兩個物件相等的時候返回相同的雜湊值。nsobject類中預設的isequal:實現只是簡單地檢查指標是否相等。isequal:的使用相當直接,它將訊息的接收者和通過引數傳入的物件進行比較。物件的比較常常可以在執行時決定應該對物件做些什麼。如果正在建立子類,則可能需要過載isequal:方法,以進一步檢查物件是否相等。子類可能定義額外的屬性,當兩個例項被認為相等時,屬性的值必須相同。
Cocoa基本原理指南之七 類簇
類簇類簇是foundation框架中廣泛使用的設計模式。類簇將一些私有的 具體的子類組合在乙個公共的 抽象的超類下面,以這種方法來組織類可以簡化乙個物件導向框架的公開架構,而又不減少功能的豐富性。類簇基於抽象工廠設計模式。類簇架構代表乙個反映簡單概念的設計。類簇中的抽象超類必須宣告建立其私有子類的方...
Cocoa基本原理指南之五 物件的建立
cocoa物件的建立總是分成兩個階段 物件分配和初始化。cocoa會從應用程式的虛存區中為物件分配足夠的記憶體。在計算需要分配多少記憶體時,cocoa會考慮物件的例項變數,包括它們的型別和順序,這些資訊由物件的類來定義。為了進行物件分配,您需要向物件的類傳送alloc或allocwithzone 訊...
Cocoa基本原理指南之五 物件的建立
cocoa物件的建立總是分成兩個階段 物件分配和初始化。cocoa會從應用程式的虛存區中為物件分配足夠的記憶體。在計算需要分配多少記憶體時,cocoa會考慮物件的例項變數,包括它們的型別和順序,這些資訊由物件的類來定義。為了進行物件分配,您需要向物件的類傳送alloc或allocwithzone 訊...