开发者社区 问答 正文

block怎么进行内存管理的?

block怎么进行内存管理的?

展开
收起
montos 2020-04-13 20:54:51 931 分享 版权
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
    赞同 展开评论
问答地址: