iOS Block

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. block的本质 我们通过一个简单的demo,解析一下block的底层原理.定义一个简单的block并调用:...
    switer_iOS阅读 2,523评论 0 0
  • 第一部分:Block本质 Q:什么是Block,Block的本质是什么? block本质上也是一个OC对象,它内部...
    sheldon_龙阅读 3,582评论 0 0
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 9,152评论 0 23
  • 一 Block的实现 1. 在main函数中声明、实现并调用一个block 2. 然后我们通过clang命令将ma...
    TIGER_XXXX阅读 3,483评论 0 0
  • block本质block是封装了函数调用以及函数调用环境的OC对象(它内部也有个isa指针) 函数调用环境:函数调...
    陈盼同学阅读 2,870评论 0 0

友情链接更多精彩内容