美文网首页
iOS 底层alloc 做了什么

iOS 底层alloc 做了什么

作者: 唱歌的鼻涕泡 | 来源:发表于2021-07-26 14:32 被阅读0次

    陷入回忆: 还记得刚去面试的时候,面试官问道:讲一下alloc 都做了什么,记得那个时候支支吾吾的说,在内存里面开辟了空间,创建了对象,并拿到对象的指针。这明显就是对内容不太了解。最近有一些空闲,那就研究研究这个alloc 到底是干了什么。

    cocoa

    1、直奔主题,去查找alloc

    项目中的alloc

    点击以后发现,根本没效果,看不到里面,苹果并没有把对应的实现暴露出来,这怎么难的到我们呢,https://opensource.apple.com,去这个网站找一找,发现 苹果给了这部分的源代码,下载下来研究一下吧!

    下载它就好啦

    刚下载下来以后是不可以用的,还需要配置,网上有对应的教程,这里就不啰嗦了。

    2、在源代码中分析,源码是C/C++ 来编写的,所有好多文件名称是.mm

    alloc方法

    我们直接搜索 ”alloc {"   拨云见日,小家伙,终于让我们找到你的真身了。封装的层数还挺多的,我们来顺藤摸瓜一下,看看它到底几层禅师几层关。

    1、层

    _objc_rootAlloc(Class cls)

    2、层

    callAlloc

    3层

    _objc_rootAllocWithZone

    4层

    _class_createInstanceFromZone

    抽丝剥茧 终于看到了它的本来面目,我们看到了这个instanceSize 可以猜到这是一个关于内存大小的属性,我们去探一探,

    发现核心代码:

    cls-> instanceSize  计算开辟空间,并对空间进行 8 字节和16字节对齐

    calloc 去申请内存

    objc->initInstanceIsa  初始化isa 指针,关联到相应的类

    总结:今天先探讨到这里,从源代码中可以看的到,我们调用的OC 中alloc  其实在底层 主要是做了三件事,1、计算开辟需要的空间 2、去申请内存 3、初始化isa 指针

    相关文章

      网友评论

          本文标题:iOS 底层alloc 做了什么

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