三种类型的 block:
1、NSGlobalBlock:存储在程序的数据区域,在 block 内部没有引用任何外部变量。
2、NSStackBlock:存储在栈上,在 block 内部引用外部变量。在 MRC 下,栈块在当函数退出的时候,该空间会被回收,因此如果再调用该 block 会导致 crash,通过拷贝该栈块,可以解决该问题。在 ARC 模式下,生成的 block 也是 栈块,只是当赋值给 strong 对象时,系统会主动对其进行 copy。
3、NSMallocBlock:存储在堆上的 block。