Block的类型
2019-08-26 本文已影响0人
南城同學
block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型
__NSGlobalBlock__( _NSConcreteGlobalBlock )
__NSStackBlock__ ( _NSConcreteStackBlock )
__NSMallocBlock__ ( _NSConcreteMallocBlock )
区分:
-
访问
auto
变量的block -->存储在栈中的__NSStackBlock___
; -
没有访问
auto
变量的block -->存储在数据段中的__NSGlobalBlock__
;
⚠️:__NSStackBlock___
是存储在栈上的,存在的隐患就是随时可能被销毁。所以在ARC环境下,会自动对block进行一次copy操作,将其转换为存储在堆上的__NSMallocBlock__
。 -
每一种类型的block调用copy后的结果如下所示: