1. block是一种数据类型
block是一种数据类型.png
2. 在block中访问外界变量
-
外界变量不带
__block
,是值传递。
不加__block是值传递.png -
外界变量带
__block
的,是址传递。
加了__block是址传递.png
3. 在block中访问外界对象
-
block在栈中,外界对象不加
__block
,不会retain
。
默认情况block存放在栈中,在栈中存放的block访问外界对象不会进行retain.png -
block在堆中,外界对象不加
__block
,会retain
。
对block进行copy,block会转存到堆中,在堆中的block引用外界变量会对对象进行retain.png -
block访问外界加
__block
修饰的对象,都不会retain
。
在block中访问外界对象,一定要给对象加上__block,否则会造成内存泄漏.png