美文网首页
Block循环引用的一些见解

Block循环引用的一些见解

作者: 慕言的世界 | 来源:发表于2017-03-18 09:50 被阅读50次

    Block循环引用的一些见解希望能帮助到即将阅读的你

    首先我们来了解下堆与栈的区别

    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
    操作方式类似于数据结构中的栈。
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
    收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
    3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
    全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
    一块区域。 - 程序结束后由系统释放。

    👇我们开始正题

    block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。

    copy最主要的事就是计数加1拷贝到堆 所以说用Strong也是可行的 。前提是在ARC环境下

    将block带入堆中的一个问题就是self会持有Block的引用。那么在block中使用self会导致循环引用,故要弱化self来解决循环引用。

    Block的变量复制

    借用网上一个图来说明

    __block修饰说明.png
    详情见 --谈Objective-C Block的实现(转载唐巧)

    相关文章

      网友评论

          本文标题:Block循环引用的一些见解

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