对象内存地址信息

2021-08-31  本文已影响0人  东方奇迹

class Persion {
var age: Int?
}
var pInstance = Persion()
var pType = Persion.self
pInstance对象的内存结构:八个字节存放指向源类型地址的指针,八个字节存放引用计数,八个字节存放age属性值

str value “pInstance” has address: 0x0000000283b3b678
(lldb) x/4xg 0x0000000283b3b678(指针变量内存地址)
(指针变量所指向对象在堆空间中的内存地址)
0x283b3b678: 0x0000000283544ce0 0x00000001008ebe78
0x283b3b688: 0x0000000000000000 0x0100000204f64595
(lldb) x/4xg 0x0000000283544ce0(指向源类型的指针地址)
(源类型的地址)
0x283544ce0: 0x00000001008ebe78 0x0000000000000003
0x283544cf0: 0x0000000000000000 0x0000000000000001

str value “pType” has address: 0x0000000283b3b680
(lldb) x/4xg 0x0000000283b3b680(指针变量内存地址)
(源类型的地址)
0x283b3b680: 0x00000001008ebe78 0x0000000000000000
0x283b3b690: 0x0100000204f64595 0x0000000281e6d1f0

self、Self、Person

self和Self:

瞎猜之下:
Person.self == Self == Person;
Person.self == Self == Person和实例对象都关联着matadata元类数据信息,matadata元类数据以虚表的形式存放着类型相关信息;

OC里面有实例对象、类对象、元类对象,及它们分别所存储的信息;
swift里只发现了实例对象、元类型,及它们分别所存储的信息,没发现有类对象的概念,可能元类对象==类对象;
注意:类类型和元类类型的相同点与不同点;

上一篇 下一篇

猜你喜欢

热点阅读