iOS isa 指针总结

说一下对 isa 指针的理解

isa 等价于 is kind of,当调用对象方法的时候,通过实例对象的isa找到类对象,最后找到类对象里面的对象方法,然后执行相应的对象方法。

isa 指针指向哪里?
image.png

实例对象 isa 指向类对象
类对象 isa 指向元类对象
元类对象 isa 指向Root class meta

isa有什么作用?

isa实例的指向类:当调用对象方法的时候,通过实例对象的isa找到类对象,最后找到类对象里面的对象方法,然后执行相应的对象方法

类对象isa指向元类:当调用类方法的时候,通过类对象的isa找到元类对象,最后找到元类对象里面的类方法,然后执行相应的类方法

什么时候会报unrecognized selector的异常?

objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,如果,在最顶层的父类中依然找不到相应的方法时,会进入消息转发阶段,如果消息三次转发流程仍未实现,则程序在运行时会挂掉并抛出异常unrecognized selector sent to XXX 。

objc在向一个对象发送消息时,发生了什么?

objc在向一个对象发送消息时,runtime会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,如果一直到根类还没找到,转向拦截调用,走消息转发机制,一旦找到 ,就去执行它的实现IMP 。

objc中向一个nil对象发送消息将会发生什么?

如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。也不会崩溃。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,707评论 1 32
  • Objective-C Objective-C是对C的扩充,它最初的设计目的是给C语言一个通过简单且直观的方式而实...
    ValienZh阅读 5,436评论 0 7
  • struct 结构体名{ 类型名 成员名1; 类型名 成员名2; ... ... ...
    恋空K阅读 1,393评论 0 2
  • 今天我早晨起来,窗户就已经开着,雨哗啦啦的下着。“冻死我啦!” 说着我便缩成一团。雨水就像一串串珍珠落在地上,滴...
    韩梦荧阅读 173评论 0 0
  • 关上门的瞬间,我知道,已没了退路。 钥匙留在了屋里。 那就这样吧,离家出走。 这个想法,决定在一小时前。一点琐事,...
    小青玉123阅读 813评论 4 5

友情链接更多精彩内容