block的一些注意事项
2015-11-28 本文已影响69人
爱易寒曲易散
Block的使用注意:
block的内存管理(注意循环引用,默认在栈中(不需要内存管理),通过copy就在在堆中,就要注意内存管理)
防止循环retian
非ARC(MRC):__block
ARC:__weak\__unsafe_unretained

1)当对block使用copy时,就自动将block函数内容从栈区复制到堆区
2)在block块中引用[p run],两者之间会产生一个强引用,最终导致循环引用

3)对block对象使用weak,则能避免此类情况


当使用int age = 10 时,block块中会出现值捕获,即在工程编译时,age = 10;便会传递到block块中,及时在下面重新对age赋值,block块中的age值也不会发生改变,仍为10;
当使用——block int age = 10时,则将age改变成一个变量,每次对age 重新赋值,都会重新调用block块函数,从而age的值会不断发生改变。
当block和控制器相互引用时