常用LLDB指令:
print p:打印
讀取內(nèi)存:
memory read/數(shù)量格式字節(jié)數(shù) 內(nèi)存地址
x/數(shù)量格式字節(jié)數(shù) 內(nèi)存地址
格式:x是16進(jìn)制 f是浮點(diǎn)數(shù) d是10進(jìn)制
字節(jié)大小
b:byte 1字節(jié) h:half word 2字節(jié)
w:word 4字節(jié) g:giant word 8字節(jié)
修改內(nèi)存中的值
memory write 內(nèi)存地址 數(shù)值
思考:一個(gè)student對(duì)象占用多少內(nèi)存空間
占用16字節(jié)
使用malloc_size()的時(shí)候是32字節(jié) (實(shí)際分配的大小)是因?yàn)橄到y(tǒng)內(nèi)部會(huì)按照16字節(jié) 再次進(jìn)行對(duì)齊 (按照16 32 48 64 80 96 112。。。)
使用class_getInstanceSize()和sizeof()的時(shí)候是24字節(jié)( 成員變量對(duì)齊后所占用的大小)
sizeof()是運(yùn)算符 不是函數(shù) 是在運(yùn)行前就已經(jīng)知道的 如果傳入一個(gè)對(duì)象 則計(jì)算的是這個(gè)對(duì)象的指針大小為8 如果傳入一個(gè)int 則計(jì)算就是int值為4
對(duì)象分為3類:
instance對(duì)象 :就是通過(guò)alloc出來(lái)的對(duì)象 每次調(diào)用alloc都會(huì)產(chǎn)生新的instance對(duì)象
實(shí)例變量?jī)?nèi)存中存儲(chǔ)著isa 和其它成員變量
類對(duì)象 :一個(gè)類的類對(duì)象,在內(nèi)存中有且只有一份
通過(guò)這個(gè)就可以驗(yàn)證
class對(duì)象在內(nèi)存中存儲(chǔ)的信息包括:
- isa指針
2.supperclass指針
3.類的屬性信息 類的對(duì)象方法信息
4.類的協(xié)議信息 類的成員變量信息(成員變量的描述信息 比如說(shuō)是什么類型)
元類對(duì)象:(meta-class)
每個(gè)元類對(duì)象,內(nèi)存中值存在一份
meta_class與class對(duì)象的內(nèi)存結(jié)構(gòu)是一樣的,但是用途不一樣
object_getClass()如果傳入的是實(shí)例對(duì)象,返回的就是類對(duì)象 如果傳入的是類對(duì)象 返回的就是元類對(duì)象
objc_getClass() 傳入一個(gè)字符串類名 返回的就是類對(duì)象
-(Class)class +(Class)class 返回的就是類對(duì)象