+一个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
网友评论