美文网首页
1 - NSObject的内存本质

1 - NSObject的内存本质

作者: ForstDragon | 来源:发表于2018-11-15 11:10 被阅读0次

+一个OC对象在内存中如何布局的?

//NSobject的底层实现
@interface NSObject{
    Class isa;//占据8个字节
    //Class
   //typedef struct objc_class *Class; 就是一个指向结构体的指针
}
如这样的一个NSOb对象,最终会被编译器编译成下面这样的C++
struct NSObject_IMPL {
    Class isa;
}
image.png
一个NSObject对象的占用的内存大小

答:
系统分配了16个字节给NSObject对象(通过malloc_size函数获得)
但是NSObject对象内部只是用了8个字节(isa占据8个字节)空间 (64bit环境下,可以通过运行时的class_getInstanceSize函数获取)
ios系统通过内存分配一般是16的倍数,不够的话,内存会有空余位

导入
#import <objc/runtime.h>
  • 运行时获取实例对象的成员变量所占用的大小方法 :
    class_getInstanceSize([NSObject class]);
#import <malloc/malloc.h>
  • obj指针指向的内存的大小
    //因为编译是c++的文件类型,所以要加上__bridge  const void* 为所需要的数据格式.
    malloc_size ((__bridge const void *)obj)
image.png
image.png
image.png
image.png

相关文章

网友评论

      本文标题:1 - NSObject的内存本质

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