iOS底层- alloc 原理探索


前言

iOS开发就业环境的要求越来越高,不只是一点UI层面的皮毛而已,更多的考虑的软件的性能,设计性能方面,就要考察更多的iOS底层的知识。特别是面试环节,基本都从底层考察。我们创建一个对象都是从alloc 开始的,平时开发创建对象如下图:

下面是具体打印的内容:

从打印内容来看, p1,p2,p3对象地址是一样的。但是对应的指针打印出的地址是不一样的。因为alloc方法在开辟了一块内存空间,init并没有这个功能。所以三个对象指向了同一个内存地址空间。


一、开始调试之旅?三种方法

1.断点调试

在要调试的代码前面,打上断点,运行之后会停顿在断点出,接下来按ctrl+step(红色键)出现以下调试界面

2、符号断点

  步骤1:

步骤2:

  运行程序后:

3、汇编跟踪

进入之后的页面,并通过下一步进行调试 

二、源码探索

      

1、我们怎么获取源码

  源码下载地址:苹果官网,如下图选择最新的:

有了源码之后,我们就可以探究alloc底层是怎么工作的。怎么调试源码具体参考:可参考大神的文章

2.我下载的是818.2版本,本地是配置好的,可运行。接下来我们创建一个对象,使用alloc方法一步步调试步骤如下图:

  2.1

 2.2

 2.3

2.4

2.5

2.5图有个方法(cls->instanceSize(extraBytes))要截图说明一下方便大家理解,主要是内存分配的空间大小,都是按16个字节对齐一种算法如下图

通过以上2.1-2.5断点调试得出alloc执行的流程图:

​​​​​​​

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值