美文网首页
OC对象的本质-窥探OC对象内存结构

OC对象的本质-窥探OC对象内存结构

作者: 凌云01 | 来源:发表于2020-09-25 14:25 被阅读0次

    OC对象的本质
    OC对象的本质-窥探OC对象内存结构
    OC对象的本质-继承关系
    上一篇文章我们分析了OC对象的本质,这一篇我们来研究OC对象的内存结构

    第一种方式

    Student.jpg

    我们首先在代码里打上断点,然后Debug->Debug Workflow->View Memory

    内存地址.jpg
    • 在Address内输入stu的地址
    • 查看内存地址,计算机分大端模式和小端模式,这里我们用的小端模式,从高地址向低地址读取。即:_age: 0x00000005 _no: 0x00000004 isa: 0x001D800100002159

    第二种方式:通过LLDB

    常用LLDB指令

    • print、p:打印
    • po : 打印对象
    • 读取内存:
      1.memory read/数量格式字节数 内存地址
      2.x/数量格式字节数 内存地址
      x/4x 0x100529f00
    • 格式: x16进制 f是浮点型 d是十进制
    • 字节大小:b: byte 1字节 h: half word 2字节
      w: word 4字节 g: giant word 8字节
    • memory write修改内存
    (lldb) po stu
    <Student: 0x100529f00>
    
    (lldb) p stu
    (Student *) $6 = 0x0000000100529f00
    
    (lldb) memory read 0x100529f00
    0x100529f00: 59 21 00 00 01 80 1d 00 04 00 00 00 05 00 00 00  Y!..............
    0x100529f10: 2d 5b 4e 53 53 63 72 75 62 62 65 72 41 72 72 61  -[NSScrubberArra
    
    (lldb) x 0x100529f00
    0x100529f00: 59 21 00 00 01 80 1d 00 04 00 00 00 05 00 00 00  Y!..............
    0x100529f10: 2d 5b 4e 53 53 63 72 75 62 62 65 72 41 72 72 61  -[NSScrubberArra
    
    (lldb) x/4xw 0x100529f00
    0x100529f00: 0x00002159 0x001d8001 0x00000004 0x00000005
    
    (lldb) x/4dw 0x100529f00
    0x100529f00: 8537
    0x100529f04: 1933313
    0x100529f08: 4
    0x100529f0c: 5
    
    (lldb) x/4xb 0x100529f00
    0x100529f00: 0x59 0x21 0x00 0x00
    
    (lldb) x/16xb 0x100529f00
    0x100529f00: 0x59 0x21 0x00 0x00 0x01 0x80 0x1d 0x00
    0x100529f08: 0x04 0x00 0x00 0x00 0x05 0x00 0x00 0x00
    
    (lldb) 
    

    那么回到最初:

    一个NSObject对象占用多少内存?
    系统分配给NSObject对象16个字节
    实际使用的是指:一个指针变量所占用的内存(64bit: 8个字节 32bit:4个字节)

    
    

    这里请大家思考一下:在64bit环境下,一个Person对象,一个Student对象占用多少内存呢?

    @interface Person : NSObject
    {
        int _no;
    }
    @end
    
    @implementation Person
    @end
    
    @interface Student : Person
    {
        int _age;
    }
    @end
    @implementation Student
    @end
    

    答案下一篇揭晓

    上一篇:OC对象的本质
    下一篇:OC对象的本质-继承关系

    相关文章

      网友评论

          本文标题:OC对象的本质-窥探OC对象内存结构

          本文链接:https://www.haomeiwen.com/subject/wjidektx.html