美文网首页
2018-07-03

2018-07-03

作者: 听风抚琴看海 | 来源:发表于2018-07-31 14:26 被阅读18次

    NSObject的内存本质

    1.实例化一个NSObject对象

            (arm64位系统情况下)

    NSObject *objc = [[NSObject alloc] init];

    打印NSObject实例对象的成员变量objc所占用的大小

    NSLog(@"class_getInstanceSize([NSObject class])----%zd",class_getInstanceSize([NSObject class]));

    可以得出class_getInstanceSize([NSObject class])----8,

    但是如果打印指针所指向的成员变量objc的内存大小

    (malloc_size 返回的是字节的大小)

    NSLog(@"%zd", malloc_size((__bridge const void *)obj));

    则结果为 16,

    通过看源码可以知道, class_getInstanceSize 返回的是cls这个对象

    调用的是 alignedInstanceSize 方法

    返回的是对齐之后的成员变量的大小

    返回的是这个类的成员变量内存对齐后所占有的大小.

    而在alloc 中,实际上调用的是 allocWithZone方法 ,具体的实现是

    调用class_createInstance 方法 调用C语言的calloc方法,size从上面获得 当开辟的内存大小不足16字节时,变成16字节

    所以,NSObject对象开辟的内存大小是CocoaFoundation框架规定的16字节,但是实际上用到的只是8字节

    LLDB调试命令

    相关文章

      网友评论

          本文标题:2018-07-03

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