實例對象:
NSObject *obj = [[NSObject alloc]init]; obj 就是實例對象涩蜘,實例對象只存儲了成員變量,包括isa指針先紫,但是不包含對象方法酥夭,因為每個實例所擁有的方法都是一樣的檐嚣,只需要一份方法就行了,所以方法是不會存放在實例中的
實例對象中存放了成員變量的具體指
類對象:
Class class1 = [obj class];
Class class2 = [NSObject class];//class方法 無論調(diào)用多少次? 返回的始終是NSObject的class對象
Class class3 = object_getClass(obj);//這個方法如果傳的是實例琴昆,那返回的就是實例的class對象氓鄙,如果傳的是class對象,那返回的就是元類對象
Class metaClass = object_getClass(class3) //這個 是元類對象
這些都是類對象椎咧,這三個類對象都是NSObject的class對象(類對象玖详,每個類在內(nèi)存中質(zhì)油一個class對象),所以他們?nèi)齻€在內(nèi)存地址中的結(jié)果也是一樣的勤讽。
類對象(class對象)在內(nèi)存中存儲的信息主要有:
1蟋座、isa指針
2、superclass指針
3脚牍、類的屬性(@property)向臀、類的對象方法(instance method)
4、類的協(xié)議信息(protocol)诸狭,類的成員變量(ivar)
元類對象包含:
1券膀、isa指針
2、superclass指針
3驯遇、類的類方法
判斷是不是元類對象:
class_isMetaClass()
獲得類對象方法的區(qū)別:
1芹彬、[NSObject class] 在這個方法獲得的就是類對象
2、object_getclass() ,這個方法是根據(jù)你傳遞的對象叉庐,去尋找對象的isa指針舒帮,所以這個方法中參數(shù)如果是實例對象就會返回類對象,如果是類對象的話就會返回元類對象
3\objc_getclass() 這個方法參數(shù)是個字符串,系統(tǒng)會根據(jù)字符串去尋找對應的類玩郊,從而返回該類的類對象