1 - NSObject的内存本质

2018-11-15  本文已影响0人  ForstDragon

+一个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>
    //因为编译是c++的文件类型,所以要加上__bridge  const void* 为所需要的数据格式.
    malloc_size ((__bridge const void *)obj)
image.png
image.png
image.png
image.png
上一篇 下一篇

猜你喜欢

热点阅读