Person * obj = [[Person alloc] init]; alloc做了什么? init又做了什么?
Alloc做了什么?
地址空间的创建
步骤如下:
cls -> instanceSize计算内存申请的大小calloc向系统申请开辟内存,返回地址指针obj -> initInstanceIsa关联类(类和地址指针绑定)
init做了什么?
return (id)self init没有开辟内存的功能, 它用于构造方法, 工厂设计等返回对象
alloc流程图
Tips
字节对齐:
内存安全,方便读取。 alloc产生的内存空间会进行16字节对齐
p = [object alloc];// 8字节
p.name = "xiaoming"; // 8字节
p.nickname = "xm" // 8字节
由于是16字节对齐, 以上会开辟一共32字节的内存空间.
常用指令:
-
bt查看堆栈信息 -
p查看对象信息 -
p/t二进制打印对象信息 -
pop+description -
x address查看地址的内存情况(memory read) -
x/4gx address以16进制打印 4行排版 -
x/8gx address以16进制打印 8行排版
参考: