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

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

用途

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

isEqual是如何比较对象的

  1. 首先检查指针是否相等。
  2. 类是否相同。
  3. 调用对象的比较器,比如说对于NSString而言对象的比较器就是isEqualToString,对于NSTimeZone的比较器就是isEqualToTimeZone,简单而言就是特定类型的对象交给特定类型的比较器去比较。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 对数据的等同性判断包括对基本数据类型等同性的判断和对象等同性的判断。对基本数据类型等同性的判断是非常简单的,...
    VV木公子阅读 5,628评论 0 8
  • 昨天一下其实抽了两张牌,今天就决定用另一张,呵呵,那么巧,就是这张。今天看东区女巫的时候,她们抽到这张拍的时候我第...
    塔罗师cat阅读 1,364评论 0 0
  • mac下无VISIO,看到介绍OmniGraffle,是完美的代替软件,除了画图,还有对图片的注释也是很出色,很漂...
    春风仿佛爱情阅读 10,037评论 1 2
  • 做一些以为孩子们都“不懂”的逗弄行为。孰不知,这些都可能成为一把利剑,刺伤了孩子们幼小的心灵。大人们总是主观的认为...
    羽一教育肖莉丽阅读 1,211评论 0 0
  • 1 “哪有人生崽会腿残疾的?” 义务教育第六年的时候,我那个长得像周杰伦的语文教师在讲台上说。在我们那儿,教师大都...
    初起阅读 1,661评论 1 2

友情链接更多精彩内容