之前已经讲过, block有三个类型 NSStackBlock 、NSMallocBlock 、 NSGlobalBlock
- NSStackBlock是放在栈中, 访问了auto变量;
- NSGlobalBlock是放在数据区中, 没有访问auto变量;
- NSMallocBlock是放在堆中, 是NSStackBlock类型的block调用了copy方法后变换过来的;
什么样的条件才会被放入堆中?
- block作为函数返回值时;
- 将block赋值给__strong指针时;
- block作为Cocoa API中方法名含有usingBlock的方法参数时;
- block作为GCD API的方法参数时;