美文网首页
iOS alloc流程

iOS alloc流程

作者: stormwyl | 来源:发表于2020-09-06 11:51 被阅读0次

流程根据objc4-781源码分析

alloc会先调用_objc_rootAlloc()函数,_objc_rootAlloc()中会调用callAlloc函数,然后会调用_objc_rootAllocWithZone(),最终会执行到_class_createInstanceFromZone()中,主要的申请内存逻辑在这个函数中。

1. 首先会获取要申请的类的size

size = cls->instanceSize(extraBytes);

首先是看是否有缓存,如果有缓存的话,就会执行缓存查找

cache.fastInstanceSize(extraBytes);

__builtin_constant_p()是编译器内置函数,判断参数是不是编译时常量,alloc的时候不会执行这个判断的代码,通过_flags获取size,然后对size执行16字节对齐,为何要减去FAST_CACHE_ALLOC_DELTA16呢?我认为是因为缓存的是16字节对齐之后的size,通过减去FAST_CACHE_ALLOC_DELTA16去修正。

如果没有缓存就会通过类本身属性获取类大小,获取大小后也会进行16字节对齐。

size_t size = alignedInstanceSize() + extraBytes;

2. 接下来会通过calloc申请内存。

if(zone) {

        obj = (id)malloc_zone_calloc((malloc_zone_t *)zone,1, size);

    }else{

        obj = (id)calloc(1, size);

    }

3. 最后将内存和类信息进行绑定

if(!zone && fast) {

        obj->initInstanceIsa(cls, hasCxxDtor);

    }else{

        // Use raw pointer isa on the assumption that they might be

        // doing something weird with the zone or RR.

        obj->initIsa(cls);

    }

alloc流程就结束了。

相关文章

  • iOS OC 方法的本质

    iOS Objective -C alloc 调用流程 iOS Object-C init&new iOS OC ...

  • iOS OC 类原理

    iOS OC底层探索 iOS Objective -C alloc 调用流程 iOS Object-C init&...

  • iOS 底层探索 文章汇总

    1、对象底层:结构体+alloc分析iOS-底层探索01:alloc 流程分析[https://www.jians...

  • iOS alloc流程

    流程根据objc4-781源码分析 alloc会先调用_objc_rootAlloc()函数,_objc_root...

  • iOS alloc 流程

    instanceSize 计算内存大小 calloc 申请开辟内存 initInstanceIsa 指针关联对象

  • iOS 底层探索03-内存对齐

    在iOS 底层探索02-alloc/init/new 探索提到了alloc 流程中涉及的一个重要方法:instan...

  • iOS探索 多线程之GCD应用

    摘于文章:链接: 欢迎阅读iOS探索系列(按序阅读食用效果更加)iOS探索 alloc流程iOS探索 内存对齐&m...

  • iOS alloc的流程

    前言 之前在做开发的时候,真的没有调试过alloc后的流程,以及它调用了那些方法,就知道alloc是申请内存空间,...

  • iOS alloc 流程分析

    iOS 底层探索 文章汇总[https://www.jianshu.com/p/77dae1109e07] 一、思...

  • iOS alloc流程分析

    前言   作为一名iOS开发人员,我们几乎天天和alloc、init绑在了一起,不管是我们写的代码抑或是看别人的代...

网友评论

      本文标题:iOS alloc流程

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