美文网首页
2.对象原理探究

2.对象原理探究

作者: JoyChenSeven | 来源:发表于2019-12-19 23:06 被阅读0次

po 0x0000000000000000 为空是因为sex 属性没有赋值,所以是nil

因为char 是1个字节,int 是 4个字节,所以在 0x0000001200006261 值 中,0x12代表的是age, 0x62 代表的是字符'b'的ascII 码, 0x61 代表的是字符'a'的ascII 码

对象和结构体在堆中

字节对齐实例:

二进制重排可以作为内存优化的方式。

例:

LGPerson 中没有其他属性,所以class_getInstanceSize 返回的是属性对齐,这时只有一个isa ,所以是8

对象申请的内存大小 和 系统开辟的大小是不一致的

class_getInstanceSize 直接返回的是属性的对齐

对ro 属性的字节对齐,ro 中主要是属性、方法等

探究,在这里可以看到size 为40 ,然后进入了calloc 方法中,calloc 在 malloc 的源码中

注: 如果跑malloc 源码有问题,出现 _radix_tree_create 报错,可以搜索 radix_tree_create,直接干掉

#define SHIFT_NANO_QUANTUM 4
#define NANO_REGIME_QUANTA_SIZE (1<< SHIFT_NANO_QUANTUM)    //  1 左移4位为 16

40 + 16 - 1 >> 4 <<4  其实就是16字节对齐,那么40 的16字节对齐就是48

前面8字节对齐,相对于对象里的属性

后面是16字节对齐,相对于对象来说

编译器优化

类的+(void)load 方法是非常耗时的,因为它会使得本类变为非懒加载类,需要编译和加载。

 initIsa

union isa_t  联合体

八个字节,每个字节有八位

isa 的结构

isa 八字节,64位

ISA_BITFIELD 对不同的cpu 架构或有不同的结果

相关文章

  • 2.对象原理探究

    po 0x0000000000000000 为空是因为sex 属性没有赋值,所以是nil 因为char 是1个字节...

  • 初探OC对象原理(三)

    前言: 这是探究OC对象原理的第三章,也是按照对象的 的底层实现原理顺序来进行的。今天我们探究下对象的本质以及一...

  • block底层原理探究(二):内存管理

    前篇block底层原理探究(一):捕获,我们探究了block捕获外部变量的原理;如果block捕获的是对象类型的a...

  • 1.对象原理探究

    alloc 探索 alloc 已经创建了对象 init alloc 实现 原理 源码实现 介绍三种方式 1、下断点...

  • 【1】OC对象原理探究

    1)了解OC运行底层入口 通常是直接进入main函数,通过插入断点,在工作台运行bt命令,可以得知线程调用状态,如...

  • OC对象底层原理探究

    1.runtime 是什么?回答:runtime是由C C++ 汇编为oc提供的一套运行时的api 2.以下代码输...

  • OC对象原理探究(上)

    前言:作为一名已经工作5年iOS开发人员,突然发现自己在底层方面的知识是如此的薄弱,甚至对一个APP的启动细节的认...

  • 关联对象底层原理探究

    通常我们会在分类中添加方法,而无法在在分类中添加属性,我们在分类中添加@property(nonatomic, c...

  • OC对象原理探究(上)

    APP启动流程探索 创建空工程代码如下,并且添加符号断点命名如下图 运行工程查看堆栈信息 红色为app启动过程: ...

  • OC对象原理探究(中)

    objc4-818.2源码编译调试不能过,请你检查以下几点 Build Setting -> enable har...

网友评论

      本文标题:2.对象原理探究

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