美文网首页基础科学iOS
iOS block三种类型

iOS block三种类型

作者: Good_Citizen | 来源:发表于2019-11-22 14:44 被阅读0次

    block有如下三种类型:

    __NSGlobalBlock __ ( _NSConcreteGlobalBlock )

    __NSStackBlock __ ( _NSConcreteStackBlock )

    __NSMallocBlock __ ( _NSConcreteMallocBlock )

    block在MRC和ARC环境下分别出现这三种类型的情况

    MRC环境:

    __NSGlobalBlock:没有访问外部auto变量,如果访问了外部static或者全局变量也是这种类型

    __NSStackBlock:访问了外部auto变量

    __NSMallocBlock:__NSStackBlock类型调用了copy方法

    上面就是MRC环境下的三种类型,如果对__NSGlobalBlock和__NSMallocBlock分别调用copy会是什么情况呢?

    __NSGlobalBlock调用copy还是__NSGlobalBlock类型,__NSMallocBlock调用copy则引用计数+1

    再看下ARC环境下的三种类型:

    __NSGlobalBlock:和MRC环境一样,不再累赘

    __NSStackBlock:访问了外部变量,但没有强引用指向这个block,而是直接打印出来

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

    相关文章

      网友评论

        本文标题:iOS block三种类型

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