1 - NSObject的内存本质

+一个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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容