1.变量捕获
| 变量类型 | 捕获到block内部 | 访问方式 | |
|---|---|---|---|
| 局部变量 | auto | √ | 值传递 |
| static | √ | 指针传递 | |
| 全局变量 | × | 直接访问 |
2.结构
内存分布

| block类型 | 环境 |
|---|---|
| NSGlobalBlock | 没有访问auto变量 |
| NSStackBlock | 访问了auto变量 |
| NSMallocBlock | NSStackBlock调用了copy |
3.结论
在ARC环境下,编译器会根据情况自动将栈**上的block复制到堆上,比如以下情况**
- block作为函数返回值时
- 将block赋值给__strong指针时
- block作为Cocoa API中方法名含有usingBlock的方法参数时
- block作为GCD API的方法参数时
__block修饰符
forwarding
强引用问题

