Objective-C 中,我们可以通过一些方法来获取一个 NSObject 对象占用多少字节;
代码获取 NSObject 实例对象的成员变量字节大小

  • 获取一个 NSObject 实例对象的成员变量所占用的字节大小,可以用 runtimeapiclass_getInstanceSize 来获取

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /** 
    * Returns the size of instances of a class.
    *
    * @param cls A class object.
    *
    * @return The size in bytes of instances of the class \e cls, or \c 0 if \e cls is \c Nil.
    */
    OBJC_EXPORT size_t
    class_getInstanceSize(Class _Nullable cls)
    OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);

    // 获得NSObject实例对象的成员变量所占用的大小 >> 8
    NSLog(@"%zd", class_getInstanceSize([NSObject class]));
  • 也可以通过 malloc_size 来获取

1
2
3
4
5
extern size_t malloc_size(const void *ptr);
/* Returns size of given ptr */

// 获得obj指针所指向内存的大小 >> 16
NSLog(@"%zd", malloc_size((__bridge const void *)obj));
  • 通过 lldb

image.png

总之,系统分配了 16 个字节给 NSObject 对象,但是 NSObject 对象只使用了 8 个字节的空间;