明智地使用内省可以使程序更加高效和强壮

内省的英文是Introspection,是面向对象语言的一大特性。
内省是对象揭示对向自己作为运行时对象详细信息的一种能力。
比如说对象在继承树上的位置,实现了哪种协议,响应了哪个消息。

用途

  1. 判断继承关系。比如说什么class,superclass方法。
  2. 检查从属关系,比如说isKindOfClass,这不就是反射嘛。
  3. 判断是否实现了某方法,respondsToSelector。
  4. 判断是否实现了某协议,confirmsToProtocol。
  5. 判断对象是否相等,hash返回对象所在哈希表的位置,isEqual能判断2个对象指针是否相等。

isEqual是如何比较对象的

  1. 首先检查指针是否相等。
  2. 类是否相同。
  3. 调用对象的比较器,比如说对于NSString而言对象的比较器就是isEqualToString,对于NSTimeZone的比较器就是isEqualToTimeZone,简单而言就是特定类型的对象交给特定类型的比较器去比较。

你可能感兴趣的:(明智地使用内省可以使程序更加高效和强壮)