内省的英文是Introspection,是面向对象语言的一大特性。
内省是对象揭示对向自己作为运行时对象详细信息的一种能力。
比如说对象在继承树上的位置,实现了哪种协议,响应了哪个消息。
用途
- 判断继承关系。比如说什么class,superclass方法。
- 检查从属关系,比如说isKindOfClass,这不就是反射嘛。
- 判断是否实现了某方法,respondsToSelector。
- 判断是否实现了某协议,confirmsToProtocol。
- 判断对象是否相等,hash返回对象所在哈希表的位置,isEqual能判断2个对象指针是否相等。
isEqual是如何比较对象的
- 首先检查指针是否相等。
- 类是否相同。
- 调用对象的比较器,比如说对于NSString而言对象的比较器就是isEqualToString,对于NSTimeZone的比较器就是isEqualToTimeZone,简单而言就是特定类型的对象交给特定类型的比较器去比较。