內(nèi)省的英文是Introspection,是面向?qū)ο笳Z言的一大特性。
內(nèi)省是對象揭示對向自己作為運行時對象詳細信息的一種能力。
比如說對象在繼承樹上的位置,實現(xiàn)了哪種協(xié)議,響應了哪個消息。
用途
- 判斷繼承關(guān)系。比如說什么class,superclass方法。
- 檢查從屬關(guān)系,比如說isKindOfClass,這不就是反射嘛。
- 判斷是否實現(xiàn)了某方法,respondsToSelector。
- 判斷是否實現(xiàn)了某協(xié)議,confirmsToProtocol。
- 判斷對象是否相等,hash返回對象所在哈希表的位置,isEqual能判斷2個對象指針是否相等。
isEqual是如何比較對象的
- 首先檢查指針是否相等。
- 類是否相同。
- 調(diào)用對象的比較器,比如說對于NSString而言對象的比較器就是isEqualToString,對于NSTimeZone的比較器就是isEqualToTimeZone,簡單而言就是特定類型的對象交給特定類型的比較器去比較。