isa指針的指向
實例對象的isa指針指向類對象
類對象的isa指針指向元類對象
isa的作用就是用來給實例找到各自的類對象的
實例的isa指向自己的類對象,類對象的isa指向元類對象,元類對象的isa指向的是基類對象(student person 這樣的類的元類對象的isa都是指向NSobject,并不是說student的元類對象就指向Person的元類對象,這是錯誤的)
superClass指針的指向
1、每個類對象都有一個superclass指針,這個指針的作用是為了幫助類找到自己的父類,比如實例對象 如果調(diào)用父類的方法,那么就是實例對象首先通過isa指針找到自己的類對象,然后在類對象中找到相應(yīng)的方法,如果沒找到,通過該類對象的superclass指針找到其父類的類對象尋找方法,一層一層往上找
2、元類對象的superclass指針指向的是父類的元類對象,類的superclass指針指向的是父類的類對象
3、如果你是找對象方法,那superclass就是在類對象中一層一層往上找,如果你找的是類方法,那就是superclass在元類對象中一層一層往上找,因為類方法存放在元類對象中
4、每個類對象都有自己的元類對象,比如student有自己的元類對象,person也有自己的元類對象,他們不是同一個
5、類對象的superclass指向的是父類的類對象,最后指向基類的類對象,由于基類沒有父類,所以基類的superclass指向nil
6、元類的superclass指向父類的元類對象,但是基類的元類對象沒有父類,所以基類的元類對象的superclass、指向的是基類的類對象
方法軌跡:
1、對象方法
根據(jù)isa指針找到自己的類對象,如果沒有該對象方法,通過類的superclsass指針找父類的對象方法,直到基類,如果還沒有,那就方法沒找到,報錯
2類方法
根據(jù)isa指針找到自己的元類對象,如果元類對象沒有該類方法,就通過superclass指針找父類的元類,如果還沒有,就一直找到基類的元類對象,如果還沒有? 注意,這里會去找基類的類對象中找,(類對象中存放的都是對象方法,蘋果就是這么設(shè)計的),如果再沒有,就會報錯,沒找到方法
