sizeof:只是一個(gè)運(yùn)算符,獲取占用多少字節(jié)晋柱。例如int類型返回4铣耘,double返回8
class_getInstanceSize:獲取對(duì)象實(shí)際使用多少內(nèi)存
malloc_size:獲取系統(tǒng)分配給對(duì)象多少內(nèi)存
OC對(duì)象的本質(zhì):結(jié)構(gòu)體
:
一、OC對(duì)象的分類:
Oc中的對(duì)象,簡稱oc對(duì)象,主要分3種
a、instance對(duì)象(實(shí)例對(duì)象)
對(duì)象就是通過類alloc出來的對(duì)象巨双,每次調(diào)用alloc都會(huì)產(chǎn)生新的instance對(duì)象。
b霉祸、class對(duì)象(類對(duì)象)
c筑累、meta-class對(duì)象(元類對(duì)象)
1、Instance 對(duì)象在內(nèi)存中存儲(chǔ)的信息包括:
a丝蹭、isa指針
B慢宗、其他成員變量
2、Class---類對(duì)象
?? ? ? Class 方法返回的一直是class對(duì)象奔穿,類對(duì)象镜沽。
獲取類對(duì)象的方法:
a、objectClass1 ~ objectClass5都是NSObject的class? ? 對(duì)象(類對(duì)象)
B贱田、他們是同一個(gè)對(duì)象缅茉,每個(gè)類在內(nèi)存中有且只有一個(gè)class對(duì)象
C、class對(duì)象在內(nèi)存中存儲(chǔ)的信息主要包括-----?
1男摧、isa指針
2蔬墩、superclass指針
3统阿、類的屬性信息(@property)、類的對(duì)象方法信息(instance method)
4筹我、類的協(xié)議信息(protocol)、類的成員變量信息(ivar)
3帆离、meta-class 對(duì)象 (元類對(duì)象)
? ? 獲取方法:
a蔬蕊、objectMetaClass是NSObject的meta-class對(duì)象(元類對(duì)象)
B、每個(gè)類在內(nèi)存中有且只有一個(gè)meta-class對(duì)象
C哥谷、meta-class 對(duì)象和class對(duì)象的內(nèi)存結(jié)構(gòu)是一樣的岸夯,但是用途不一樣,在內(nèi)存中存儲(chǔ)的信息主要包括:
1们妥、isa指針
2猜扮、superclass指針
3、類的類方法信息(class method)
4监婶、查看Class是否為 meta-class
BOOL result = class_isMetaClass([NSObject class]);
二旅赢、對(duì)象的 isa 指向哪里
1、instance (實(shí)例對(duì)象)的 isa 指向 class (類對(duì)象):
當(dāng)調(diào)用 對(duì)象方法時(shí)惑惶,通過 instance (實(shí)例對(duì)象) 的 isa 找到 class (類對(duì)象)煮盼,最后找的對(duì)象方法的實(shí)現(xiàn)進(jìn)行調(diào)用。
2带污、class (類對(duì)象)的 isa 指向 meta-class (元類對(duì)象):
當(dāng)調(diào)用 class (類對(duì)象)時(shí)僵控,通過 class (類對(duì)象) 的 isa 找到 meta-class (元類對(duì)象),最后找到類方法的實(shí)現(xiàn)進(jìn)行調(diào)用。
3鱼冀、 class (類)對(duì)象的 superclass 指針:
當(dāng)student的instance(實(shí)例對(duì)象)調(diào)用person的對(duì)象方法時(shí)报破,會(huì)先通過isa找到student的class? (類對(duì)象),然后通過superclass找到person的class(類對(duì)象)千绪,最后找到對(duì)象方法的實(shí)現(xiàn)進(jìn)行調(diào)用充易。
? ? ?
4、 meta-class (元類對(duì)象)的 superclass 指針:
當(dāng)student的class(類對(duì)象)調(diào)用person的類方法時(shí)荸型,會(huì)先通過isa找到student的meta-class? (元類對(duì)象)蔽氨,然后通過superclass找到person的meta-class? (元類對(duì)象),最后找到類方法的實(shí)現(xiàn)進(jìn)行調(diào)用帆疟。
5鹉究、isa 、superclass 總結(jié)
?instance 的 isa 指向 calss踪宠,
?class 的 isa 指向 meta-class
?meta-calss 的 isa 指向基類的 meta-class
?class 的 superclass 指向父類的 class
如果沒有父類自赔,superclass 指針為 nil
?meta-class 的 superclass 指向父類的 meta-class
如果meta-class 的 superclass 指向基類的class?
?instance 調(diào)用對(duì)象方法的軌跡
isa找到 class ,方法不存在柳琢,就通過superclass 去父類里面找
?class調(diào)用類方法的軌跡
isa找 meta-class 绍妨,方法不存在润脸,就通過superclass 找父類