1.什么是類加載?
在創(chuàng)建對象的時候,肯定是需要訪問類的.所以在程序運行期間,當某個類第一次被訪問到的時候,會將這個類存儲到內(nèi)存中的代碼段區(qū)域,這個過程叫做類加載.
只有類在第一次被訪問的時候,才會做類加載,一旦類被加載到代碼段以后,直到程序結(jié)束的時候才會被釋放.
2.類對象的獲取方式和在內(nèi)存中存儲的信息包括哪些?

3.類對象在內(nèi)存中的真實結(jié)構(gòu)(struct objc_class)

4.元類對象(meta - class)的獲取方式?
ps:只有通過object_getClass()這個RuntimeAPI才能獲取meta-class對象 , 無論使用多少次class方法只能獲取class對象.


5.元類(meta-class)對象的內(nèi)部結(jié)構(gòu)

meta-class對象和class對象的內(nèi)存結(jié)構(gòu)是一樣的,只是說在meta-class對象中的類方法信息是有值的,而class對象中的類方法信息是null,同樣在class對象中屬性信息、對象方法信息、協(xié)議信息、成員變量信息這些是有值的,而類方法信息是null.
6.關(guān)于返回類對象還是元類對象的方法總結(jié)
1.Class objc_getClass(const char *aClassName)
1>傳入字符串對象
2>返回對應(yīng)的類對象
2.Class object_getClass(id obj)
1>傳入的obj是OC對象,OC對象包括instance對象、class對象、meta-class對象.
2>返回值
a.如果是instance對象,返回class對象.
b.如果是class對象,返回meta-class對象.
c.如果是meta-class對象,返回NSObject(基類)的meta-class對象.
3.-(Class)class、+(Class)class
1>返回的就是類對象
7.關(guān)于isa、superclass總結(jié)

1)instance調(diào)用對象方法的軌跡
通過isa指針找到class對象,如果class對象里這個對象方法不存在,就通過superclass指針找父類class對象,如果沒有就一直通過superclass指針找父類class對象,一直找到NSObject類對象,NSObject類對象里還沒有要找的對象方法,就報unrecognized selector sent to class.
2)class調(diào)用類方法的軌跡
通過isa指針找到元類對象,如果類方法不存在,就通過superclass指針找父元類對象,一直找到NSObject元類對象,如果NSObject元類對象也沒有這個類方法,還會通過superclass指針去找NSObject類對象,如果NSObject類對象里還是沒有要找的類方法,就報錯.
8.對象的isa指針指向哪里?
1)instance對象的isa指向class對象.
2)class對象的isa指向meta_class對象.
3)meta-class對象的isa指向基類的meta-class對象.
9.OC的類信息存放在哪里?
1)對象方法、屬性、成員變量、協(xié)議信息,存放在類對象里.
2)類方法,存放在meta-class對象中.
3)成員變量的具體值,存放在instance對象中.