Block

作者: 万万万万万万一 | 来源:发表于2023-07-27 17:12 被阅读0次

    Block的本质

    Block本质是一个oc对象,它内部有一个isa指针

    Block是封装了函数调用以及函数调用环境的oc对象

    Block 的变量捕获(capture)

    111.png

    Block类型

    222222.png

    MRC情况下

    3333.png

    Block类型copy 结果 MRC情况下 (ARC 自动从栈区 拷贝到堆区)

    4444.png

    ARC情况下Copy

    编译器会自动把栈区 block 拷贝到堆区

    block作为函数的返回值时

    block赋值给_ _strong指针时(强指针时)

    block最为cocoaAPI中方法名usingBlock的方法参数时 比如数组遍历[array enumeObjc usingBlock.....]

    block最为GCD API方法参数时

    当对象类型的auto变量时

    当block内部访问了对象类型的auto变量时

    如果block在栈区,将不会对auto变量产生强引用(mrc 或arc情况)

    如果block在堆区

    5555.png

    __block修饰符

    666.png

    __block内存管理问题

    7777.png

    对象类型的auto变量 __block变量

    888.png

    block 循环引用

    ARC环境下

    111.png 2222.png

    ARC环境下 (不支持弱指针 __weak)

    3333.png

    相关文章

      网友评论

          本文标题:Block

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