1.NSGlobalBlock:静态区
- 打印:
2.NSMallocBlock:堆区
-
打印:
block捕获外部变量后,为堆区block!
3.NSStackBlock:栈区
- 打印
底层原理
-
__block作用:
-
结果
1.没有__block修饰时
- 我们使用终端编写一段.c文件的C代码:
- 终端输入clang -rewrite-objc block.c命令生成block.cpp文件,打开文件(如下图c++代码)和说明:
2.有__block修饰时
-
同样我们使用终端编写一段.c文件的C代码:
-
终端输入clang -rewrite-objc block.c命令生成block.cpp文件,打开文件(如下图c++代码)和说明:
通过上面比较我们发现: block捕获外部变量,如果没有使用__block修饰,在block声明及调用的过程中, block捕获的是变量的值,是一个值传递,我们在block内部没有修改变量的权限! 当变量使用__block修饰时,则变为变量内存地址的传递, 我们在block内部就具有了修改变量的权限!
- 我们使用终端编写一段.c文件的C代码: