isa指针superclass

isa指针的指向

实例对象的isa指针指向类对象

类对象的isa指针指向元类对象

isa的作用就是用来给实例找到各自的类对象的

实例的isa指向自己的类对象,类对象的isa指向元类对象,元类对象的isa指向的是基类对象(student person 这样的类的元类对象的isa都是指向NSobject,并不是说student的元类对象就指向Person的元类对象,这是错误的)

superClass指针的指向

1、每个类对象都有一个superclass指针,这个指针的作用是为了帮助类找到自己的父类,比如实例对象 如果调用父类的方法,那么就是实例对象首先通过isa指针找到自己的类对象,然后在类对象中找到相应的方法,如果没找到,通过该类对象的superclass指针找到其父类的类对象寻找方法,一层一层往上找

2、元类对象的superclass指针指向的是父类的元类对象,类的superclass指针指向的是父类的类对象

3、如果你是找对象方法,那superclass就是在类对象中一层一层往上找,如果你找的是类方法,那就是superclass在元类对象中一层一层往上找,因为类方法存放在元类对象中

4、每个类对象都有自己的元类对象,比如student有自己的元类对象,person也有自己的元类对象,他们不是同一个

5、类对象的superclass指向的是父类的类对象,最后指向基类的类对象,由于基类没有父类,所以基类的superclass指向nil

6、元类的superclass指向父类的元类对象,但是基类的元类对象没有父类,所以基类的元类对象的superclass、指向的是基类的类对象

方法轨迹:

1、对象方法

根据isa指针找到自己的类对象,如果没有该对象方法,通过类的superclsass指针找父类的对象方法,直到基类,如果还没有,那就方法没找到,报错

2类方法

根据isa指针找到自己的元类对象,如果元类对象没有该类方法,就通过superclass指针找父类的元类,如果还没有,就一直找到基类的元类对象,如果还没有  注意,这里会去找基类的类对象中找,(类对象中存放的都是对象方法,苹果就是这么设计的),如果再没有,就会报错,没找到方法

你可能感兴趣的:(isa指针superclass)