isa:是一個Class 類型的指針. 每個實例對象有個isa的指針,他指向對象的類,而Class里也有個isa的指針, 指向meteClass(元類)。元類保存了類方法的列表。當類方法被調用時,先會從本身查找類方法的實現,如果沒有,元類會向他父類查找該方法。同時注意的是:元類(meteClass)也是類,它也是對象。元類也有isa指針,它的isa指針最終指向的是一個根元類(root meteClass).根元類的isa指針指向本身,這樣形成了一個封閉的內循環。
元類:元類是類對象的類,類對象是元類的實例。
1.我們以前調用"+"開頭的類方法實際是在調用元類的對象方法
2.由于每個類有且只有一個,所以每個類對象都是其對應元類的單例
1.每個實例對象的類都是類對象,每個類對象的類都是元類對象,每個元類對象的類都是根元類(root metaclass的isa指向自身)2.類對象的父類最終繼承自根類對象NSObject,NSObject的父類為nil3.元類對象(包括根元類)的父類最終繼承自根類對象NSObject
可見,類與元類是一個閉環。