Block是将函数及其执行上下文封装起来的对象。
在开发过程中我们经常会用到Block处理一些事物,下面我们就对Block做一下简单的梳理。
先上Demo
Block捕获变量
- 局部变量
- 静态局部变量
- 全局变量
- 静态全局变量
->局部变量
(1)基本数据类型局部变量
基本数据类型:对于基本数据类型的局部变量截获其值(值传递)

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

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

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

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

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

Block的内存管理
直接上图吧,比较直观。
结语
关于block常用的知识点在这里已经简单的总结了,如有不对之处,烦请指正vast0608@163.com谢谢!
网友评论