Block

什么是block

  • block是将函数及其执行上下文封装起来的对象

源码解析

  • 可以使用 ‘clang -rewrite-objc file.m’ 查看编译之后的文件内容

block截获变量特性

  • 局部变量:对于基本数据类型截获其值,对于对象类型连同所有权修饰符(strong/weak/_unsafe_unretained) 一起截获
  • 静态局部变量:以指针形式截获
  • 全局变量: 不截获
  • 静态全局变量: 不截获

__block修饰符

  • 一般情况下, 对被截获变量进行赋值操作需要添加__block修饰符
  • 静态局部变量, 全局变量, 静态全局变量不需要__block修饰符

block的内存管理