alloc -> objc_alloc
在真正調(diào)用alloc 函數(shù)時(shí),有時(shí)會(huì)先調(diào)用objc_alloc,因?yàn)樵赼lloc進(jìn)行符號(hào)綁定的時(shí)候,如果執(zhí)行了 objc read images 的時(shí)候,如果發(fā)生錯(cuò)誤,就會(huì)執(zhí)行fixupMessageRef,這時(shí)就可能會(huì)重新綁定符號(hào)為 objc_alloc


p/t? 指令,二進(jìn)制打印
p/o 指令,八進(jìn)制打印
p/d 指令,十進(jìn)制打印
p/x xxx.class? 指令,打印xxx 的class
p/t (uintptr_t)xxx.class? 指令

isa 關(guān)聯(lián)類






#? define ISA_MASK? ? ? ? 0x00007ffffffffff8ULL
這里先獲取person 對(duì)象的ISA地址,然后在獲取Person 類對(duì)象的地址,然后將isa 的地址 & 上對(duì)應(yīng)的架構(gòu)下的 ISA_MASK,就會(huì)得到與類對(duì)象地址一樣的值,打印的話就是LCPerson
ISA關(guān)聯(lián)了對(duì)象和類

類對(duì)象在內(nèi)存中只會(huì)創(chuàng)建一個(gè),證明

類的內(nèi)存, 第一個(gè)位置 指向類的元類 meta class

對(duì)象可以創(chuàng)建多個(gè)
類只可以創(chuàng)建一個(gè)
類的內(nèi)存, 第一個(gè)位置 指向類的元類
對(duì)象 - 程序員根據(jù)類 - 實(shí)例化
類 - 代碼寫出來(lái)的 -? 內(nèi)存中只有一份 ,不是我們創(chuàng)建的 ,由系統(tǒng)創(chuàng)建的
元類 - 系統(tǒng)編譯的? - 發(fā)現(xiàn)有了這么一個(gè)類 - 系統(tǒng)也同時(shí)創(chuàng)建了 , 編譯器創(chuàng)建的
比如說(shuō)方法,這是編譯階段就會(huì)產(chǎn)生的
對(duì)象 -> 類對(duì)象??->? 元類?->? 根源類?-> 根源類
獲取類的方法 - isa 走位

詳盡的表示isa 的指向圖


isa 走位和繼承關(guān)系

superClass 的繼承關(guān)系 : nsobject 父類是nil, 根元類的父類是NSObject
class 的類型是一個(gè)?objc_class 的結(jié)構(gòu)體,第一個(gè)參數(shù)是isa ,第二個(gè)參數(shù)就是superclass,可以打印看出根元類的父類就是NSObject


對(duì)象的本質(zhì)
$ clang -rewrite-objc main.m -o main.cpp



對(duì)象在底層編譯,會(huì)得到一個(gè)結(jié)構(gòu)體,會(huì)繼承父類的屬性,包括setter getter 方法


@16@0:8? ? 的含義 ,第一個(gè) @ 是返回值類型 id ,第二個(gè)@ 是參數(shù)一類型 id? 參數(shù)長(zhǎng)度 0 -7,:參數(shù)二類型? sel , 長(zhǎng)度 8 -? 15,



實(shí)例變量是一種特殊的成員變量

成員和屬性的區(qū)別
相當(dāng)于寫了個(gè)NSString *_name; 的成員變量,并生成setter getter 方法

如果成員變量和屬性的命名一樣的話,只會(huì)生成一個(gè)。
NSProxy 的根元類就是NSProxy 。