说一下对 isa 指针的理解
isa 等价于 is kind of,当调用对象方法的时候,通过实例对象的isa找到类对象,最后找到类对象里面的对象方法,然后执行相应的对象方法。
isa 指针指向哪里?
实例对象 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地址返回了,所以不会出现任何错误。也不会崩溃。