- 记述全局变量的地方有Block语法时
- Block语法的表达式中不使用应截获的自动变量时
该Block为_NSConcreteGlobalBlock类对象。即Block配置在程序的数据域中。除此之外的Block语法生成的Block为_NSConcreStackBlock类对象,设置在栈上。
那么将Block配置在堆上的_NSConcreteMallocBlock类在何时使用呢?
配置在全局变量上的Block,从变量作用域外也可以通过指针安全地使用。但设置在栈上的Block,如果其所属的变量作用域结束,该Block就被废弃。由于__block变量也配置在栈上,同样地,如果其所属的变量作用域结束,则该__block 变量也会被废弃。
将配置在栈上的Block复制到堆上,这样即使Block语法记述的变量作用域结束,堆上的Block还可以继续存在。