开发者社区> 问答> 正文

block怎么进行内存管理的?

block怎么进行内存管理的?

展开
收起
montos 2020-04-13 20:54:51 903 0
1 条回答
写回答
取消 提交回答
  • block按照内存分布,分三种类型:全局内存中的block、栈内存中的block、堆内存中的block。

    在MRC和ARC下block的分布情况不一样

    MRC下:

    当block内部引用全局变量或者不引用任何外部变量时,该block是在全局内存中的。

    当block内部引用了外部的非全局变量的时候,该block是在栈内存中的。

    当栈中的block进行copy操作时,会将block拷贝到堆内存中。

    通过__block修饰的变量,不会对其应用计数+1,不会造成循环引用。

    ARC下:

    当block内部引用全局变量或者不引用任何外部变量时,该block是在全局内存中的。

    当block内部引用了外部的非全局变量的时候,该block是在堆内存中的。

    也就是说,ARC下只存在全局block和堆block。

    通过__block修饰的变量,在block内部依然会对其引用计数+1,可能会造成循环引用。

    通过__weak修饰的变量,在block内部不会对其引用计数+1,不会造成循环引用。

    参考这篇文章

    2020-04-13 20:55:01
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载