关于Block的理解

Block是将函数及其执行上下文封装起来的对象。
在开发过程中我们经常会用到Block处理一些事物,下面我们就对Block做一下简单的梳理。

先上Demo


Block捕获变量

  • 局部变量
  • 静态局部变量
  • 全局变量
  • 静态全局变量
->局部变量

(1)基本数据类型局部变量
基本数据类型:对于基本数据类型的局部变量截获其值(值传递)


image.png

(2)对象类型局部变量
对象类型:对于对象类型的局部变量连同所有权修饰符一起截获(指针传递)


image.png
->静态局部变量

静态局部变量:对于静态局部变量是以指针形式截获的(指针传递)


image.png
->全局变量

全局变量:不截获(直接访问)


image.png
->全局静态变量

全局静态变量:不截获(直接访问)


image.png

__block修饰符

一般情况下,对被截获变量进行赋值操作需要添加__block修饰符(注意区分赋值和使用)
需要__block修饰符:对象类型、基本数据类型
不需要__block修饰符:静态局部变量、全局变量、静态全局变量

__block修饰的变量变成了对象
image.png

Block的内存管理

直接上图吧,比较直观。
IMG_839EB5ECE982-1.jpeg

结语

关于block常用的知识点在这里已经简单的总结了,如有不对之处,烦请指正vast0608@163.com谢谢!

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

推荐阅读更多精彩内容