美文网首页
学习笔记-OC对象本质

学习笔记-OC对象本质

作者: zhongli_007 | 来源:发表于2020-04-18 20:53 被阅读0次

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的对象分为:实例对象 , 类对象 ,元类对。存储结构:

他们之间的关系:


感谢总结这张图的大神,很清晰

相关文章

  • 学习笔记-OC对象本质

    1.Objective-C代码,底层实现其实都是C\C++代码2.所有Objective-C的面向对象都是基于C\...

  • OC 与 Swift

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • OC对象的本质(中)—— OC对象的种类

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • OC对象的本质(下)—— 详解isa&supercl

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • OC对象的本质(上)

    iOS | OC对象本质 | Objective-C 什么是OC语言,OC对象、类的本质是什么,OC对象的内存布局...

  • 内存管理--简单整理

    课堂笔记: 只有OC对象才需要进行内存管理的本质原因是OC对象存放在堆里面,非OC对象一般放在栈里面(栈内存会被系...

  • block 笔记

    block本质是OC对象(封装了函数调用以及调用环境的OC对象) 本质

  • Runtime:OC对象、类、元类的本质

    零、Runtime是什么一、OC对象的本质二、OC类的本质三、OC元类的本质四、Runtime关于对象、类、元类的...

  • iOS底层isa结构分析

    在介绍正文之前,首先需要理解一个概念:OC对象的本质是什么? OC对象本质 在探索oc对象本质前,先了解一个编译器...

  • 笔记(一):OC对象本质

    一 通用的一些东西 OC 的面向对象是基于C/C++的结构体实现的。 2.OC代码转C++代码 可能会遇到的错误&...

网友评论

      本文标题:学习笔记-OC对象本质

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