Objective-C中的對象,主要能夠分3種: instance對象(實例對象)、class對象(類對象)、meta-class對象(元類對象)spa
instance對象就是經過類alloc出來的對象,每次經過alloc都會產生新的instance對象 instance對象在內存中存儲的信息包括isa指針、具體成員變量的值3d
每一個類在內存中有且只有一個class對象 call對象在內存中存儲的信息主要包括:isa指針、superclass指針、類的屬性信息(@property)、類的對象方法信息(instance method)、類的協議信息(protocol)、類的成員變量信息(ivar)指針
objectMetaClass是NSObject的meta-class對象(元類對象),每一個類在內存中有且只有一個meta-class對象。meta-class對象和class對象的內存結構是同樣,可是用途不同,在內存中存儲的信息主要存儲isa指針、superclass指針、類的類方法信息code
能夠經過以下代碼獲取Class對象的元類:對象
Class objectClass = object_getClass([NSObject class]);
當調用對象方法時,經過instance的isa找到class,最後找到對象方法的實現進行調用blog
當調用類方法時,經過class的isa找到meta-class,最後找到類方法的實現進行調用內存
當Student的instance對象要調用Person的對象方法時,會先經過isa找到Student的class, 而後經過superclass找到Person的class,最後找到對象方法的實現進行調用get
當Student的class要調用Person的類方法時,會先經過isa找到Student的meta-class,而後經過superclass找到Person的meta-class,最後找到類方法的實現進行調用class