ios 添加block 类别_iOS block三种类型

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到堆上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值