iOS底层原理 - Block的类型

block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型
  • __NSGlobalBlock__( _NSConcreteGlobalBlock )
  • __NSStackBlock__ ( _NSConcreteStackBlock )
  • __NSMallocBlock__ ( _NSConcreteMallocBlock )

区分:
  • 访问auto变量的block -->存储在栈中的 __NSStackBlock___;

  • 没有访问auto变量的block -->存储在数据段中的 __NSGlobalBlock__;
    ⚠️:__NSStackBlock___是存储在栈上的,存在的隐患就是随时可能被销毁。所以在ARC环境下,会自动对block进行一次copy操作,将其转换为存储在堆上的__NSMallocBlock__

  • 每一种类型的block调用copy后的结果如下所示:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容