- 前面说到编译器会帮助完成一些 Block 嘚 copy也有手动 copy Block。那么 Block 被复制到堆上的情况有(此段摘自于『Objective-C高级编程 iOS与OS X多线程和内存管理』)对于这段话我觉得有必要说说:
- 若Block中引用叻局部变量,则编译器会帮我们复制到堆上;
- 对于上面文章中提到的前三点在MRC下并不会复制到堆上,Block还是在栈上等到作用域过了,内存还是照样被回收了!!!
- 要让Block复制到堆上可使用copy方法;
- ARC?和MRC下都可运行,毕竟Block还未被释放!??????
- MRC下能运行Block存放在堆上;
- ARC下鈈能运行,Block超过作用域将会被释放所以MRC下不能运行;
- Block中没有使用到外部变量,所以Block为全局类型MRC和ARC下都能运行;
- MRC下能运行,Block存放在堆上;
- ARC下不能运行Block超过作用域将会被释放,所以MRC下不能运行;
- ?跟上一个?原理相同,可参考之!虽然说有时候可能编译器能运行,那只是block占用内存还没被系统回收罢了!!!