关于Block的理解

2020-04-08  本文已影响0人  碧海云天V

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谢谢!

上一篇下一篇

猜你喜欢

热点阅读