美文网首页
Block 内存

Block 内存

作者: 初灬终 | 来源:发表于2019-10-18 11:57 被阅读0次

block的copy

block的三种类型:
NSConcreteStackBlock 存储于栈,copy时复制一份存储于堆。
NSConcreteMallocBlock 存储于堆,copy时无操作
NSConcreteGlobalBlock 存储于已初始化区,copy时无操作

__block变量的__forwarding

clang -rewrite-objc main.m后,发现__block修饰的局部变量被封装成了__Block_byref_XXX_0 结构体。
__isa成员变量指向Block的类型,__forwarding指向什么呢?

//XXX为__block修饰的变量的变量名
struct __Block_byref_XXX_0 {
  void *__isa;
__Block_byref_num_0 *__forwarding;
 int __flags;
 int __size;
 int num;
};

未copy之前,Block,__Block变量都位于栈,__forwarding指向 __Block变量自身。
copy之后,Block,__Block变量都复制到堆,栈区__forwarding指向堆__Block变量,堆__forwarding也指向堆__Block变量。
随着作用域结束,栈上的Block,__Block变量都会释放。堆上的Block,__Block依旧存在。

相关文章

  • Block内存管理实例分析

    Block内存管理实例分析 Block内存管理实例分析

  • Block探索

    Block内存关系Block经典问题循环引用&解决Block底层分析Block底层HooK 程序占用内存分类 栈区...

  • Block内存管理

    对block自身内存的管理 对于block,有两个内存管理方法:Block_copy, Block_release...

  • Block 使用总结

    Block 内存管理: Block 内存主要分派到 NSGlobalBlock(data area),NSMall...

  • iOS面试之Block大全

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • Block

    一、Block本质 二、 BlocK截获变量 三、__block 修饰变量 四、Block内存管理 五、Block...

  • block的内存管理

    block的内存默认放在栈中,(开发人员不需要管理block内存),block所引用的对象的retainCount...

  • Block

    Block介绍 截获变量 __block修饰符 Block的内存管理 Block的循环引用 一、Block介绍 1...

  • block入门和简单使用(定义,做参数,做返回值,内存管理,循环

    本文略为全面的介绍block的使用:block定义方式,block传值,block循环引用,block内存管理,b...

网友评论

      本文标题:Block 内存

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