学习笔记-OC对象本质

1.Objective-C代码,底层实现其实都是C\C++代码
2.所有Objective-C的面向对象都是基于C\C++的数据结构实现的,Objc对象最终都是转化为C/C++的结构体

OC转C++代码可以通过xcode自带的命令完成

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp

常用LLDB指令:

print、p:打印 
po:打印对象
x/数量+格式+字节数 内存地址 ( 格式(x:16进制 f:浮点 d:10进制)字节数(b:1字节 h:2字节 w:4字节 g:8字节))
例子: x/4xw  0x100504ed0 表示 每组4个字节以16进制表示打印4组0x100504ed0指向的内存区域。
memory write 内存地址 值 (例子:memory write 0x100504ed1 1f  :将0x100504ed1处的值改为1f)

一个NSObject实例对象大小是8个字节(isa指针),分配16个字节 证明:

 NSObject *obj = [[NSObject alloc]init];
//获得NSObject类的实例对象的大小
 NSLog(@"%zd",class_getInstanceSize([NSObject class]));
 //获得obj指针指向内存的大小
 NSLog(@"%zd",malloc_size((__bridge const void*)obj));

打印结果:8 16
窥探Objc源码:

//NSObject实际上转化为这种结构体,包含一个成员变量Class 而Class是一个结构体指针,而指针在64位系统中占用8个字节。所以实例对象大小是8个字节

struct NSObject_IMPL {
    Class isa;
};
typedef struct objc_class *Class;

#define NANO_MAX_SIZE           256 /* Buckets sized {16, 32, 48, ..., 256} */

64位苹果操作系统堆空间分配内存有内存对齐的概念:分配的内存是16的倍数


1.OC的对象分为:实例对象 , 类对象 ,元类对。存储结构:

他们之间的关系:


感谢总结这张图的大神,很清晰
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS底层原理总结 - 探寻OC对象的本质 原文链接 对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题...
    二斤寂寞阅读 660评论 0 4
  • iOS底层原理总结 - 探寻OC对象的本质 对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索...
    xx_cc阅读 21,569评论 31 178
  • 探寻OC对象的本质,我们平时编写的Objective-C代码,底层实现其实都是C\C++代码,如图所示: OC的对...
    二猪哥阅读 568评论 0 6
  • 本篇主要是对小码哥底层视频学习的总结。方便日后复习。 本篇学习总结: NSObject对象/自定义类的对象/继承关...
    329fd8af610c阅读 367评论 0 0
  • 山隐隐,雾蒙蒙 眼前这白茫茫的 连接天与地 这般朦胧 又些许情柔 你是谁 是高级的魔术师 把周边的一切变成白色的海...
    是麻小五n阅读 159评论 0 3