美文网首页
iOS 底层原理

iOS 底层原理

作者: qjsxq | 来源:发表于2020-07-03 09:31 被阅读0次

    1、一个NSObject对象占用多少内存

    首先通过

    xcrun  -sdk  iphoneos  clang  -arch  arm64  -rewrite-objc  OC源文件  -o  输出的CPP文件
    如:
    xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
    

    将OC代码编译成C++代码,发现对象在内存中是以结结构体存在的

    struct NSObject_IMPL {
        Class isa;// 8个字节
    };
    

    然后通过代码获取的内存大小为
    方法1

     // 获取某个类创建实例对象的大小
     NSLog(@"%zd",class_getInstanceSize([NSObject class]));// 8
    

    方法2

      // 获得obj所指向内存的大小
      NSLog(@"%zd",malloc_size((__bridge const void *)objc)); // 16
    

    通过源码查看(https://opensource.apple.com/tarballs/objc4
    查找allocWithZone
    最后查到下面的代码

     size_t instanceSize(size_t extraBytes) {
            size_t size = alignedInstanceSize() + extraBytes;
            // CF requires all objects be at least 16 bytes.
            if (size < 16) size = 16;
            return size;
        }
    

    结论:系统分配了16个字节给NSObject对象,但是NSObject只使用了8个字节的空间

    相关文章

      网友评论

          本文标题:iOS 底层原理

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