iOS Block

作者: Shineyok | 来源:发表于2021-12-15 13:57 被阅读0次

    Block介绍

    • block 本质上也是一个 OC 对象,它内部也有个 isa 指针
    • block 是封装了函数调用以及函数调用环境的 OC 对象
    • block 是封装函数及其上下文的 OC 对象

    Block的三种类型

    • _NSConcreteStackBlock:全局数据区的 Block 对象,在栈上创建。
    • _NSConcreteMallocBlock:在堆上创建的 Block 对象
    • _NSConcreteGlobalBlock:全局数据区的 Block 对象

    对三种Block对象分别进行copy的结果为

    • __NSGlobalBlock __ 调用 copy 操作后,什么也不做
    • __NSMallocBlock __ 调用 copy 操作后,复制效果是:引用计数增加;副本存储位置是堆
    • _NSStackBlock __ 调用 copy 操作后,复制效果是:从栈复制到堆;副本存储位置是堆

    Block的类型如何界定?

    NSGlobalBlock界定方法

    • 不捕获全局变量(包括全局静态变量)
    • 没有捕获变量或者捕获的只有局部静态变量
    • 以指针形式截获局部静态变量

    NSStackBlock
    访问了外部变量,但没有强引用指向这个block

    NSMallocBlock
    访问了外部变量而且有强引用指向该block(或者作为函数返回值)就会自动将__NSStackBlock类型copy到堆上

    相关文章

      网友评论

          本文标题:iOS Block

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