關(guān)于類首先我們都知道我們再創(chuàng)建一個類的時候都會繼承與NSObject,那么NSObject中是怎么實現(xiàn)的。我們創(chuàng)建的類和NSObject之間是不是還有其他的東西存在?本文就對此進行一些簡單的探索。
類 元類 根元類
·類 類實際上就是一個對象。
·元類 什么是元類?例如LYHPerson類也是一個對象。那么他肯定是有一個類實例化得到的,這個類就是元類。
·根元類 根元類 就是元類實例化得到的。也就是我們所說的NSObject。
探索過程如圖所示:

首先我們打印出一個類的x/4gx一個類,可以打印出這個類的內(nèi)存地址的情況。我們拿到首地址(即類的指針地址),&MASK得出?0x00000001000022e8 這個地址。我們打印這個地址就能得出當(dāng)前這個類的類名。
然后我們繼續(xù)對 這個地址進行x/4gx 我們就能得出一個新的內(nèi)存地址的情況,然后用同樣的方法 有打印出了一個LYHPerson 0x00000001000022c0。那么這個LYHPerson就是元類。
我們繼續(xù)進行操作就能得出0x00000001003340f0 這樣一個地址。打印這個地址就能得出NSObject。就證明了NSObject是LYHPerson的根元類。
繼承
如果此時我們繼承LYHPerson創(chuàng)建一個LYHTeacher,LYHPerson *person;LYHTeacher *teacher,此時person和teacher是沒有關(guān)系的。只有LYHPerson和LYHTeacher是存在繼承關(guān)系。那么此時的繼承關(guān)系就是LYHTeacher繼承于LYHPerson,LYHPerson又繼承于NSObject,NSObject繼承于nil。為什么NSObject繼承于nil呢。是因為NSObject就是類的基礎(chǔ),是一個從無到有的過程。

了解了類的整個過程之后 上圖我們就能知道上圖的整個流程。
類的分析
對于類的分析 首先我們看一張源碼的截圖,如圖所示

圖中objc_object 和 objc_class是什么呢?objc_object是我們創(chuàng)建所有對象的根對象,而objc_class是繼承于objc_object的,而objc_class包含了我們創(chuàng)建對象的所有信息。怎么印證呢?
首先我們再LYHPerson里面創(chuàng)建一個屬性 name如圖:

然后我們通過對地址的訪問一步步的獲取到內(nèi)容。具體操作如圖所示


通過這兩張圖,最后通過打印*$8我們就得到了LYHPerson中的name屬性。這就印證了objc_class里面儲存了 我們創(chuàng)建的類的所有信息這句話。