block的一些注意事项

Block的使用注意:

block的内存管理(注意循环引用,默认在栈中(不需要内存管理),通过copy就在在堆中,就要注意内存管理)

防止循环retian

非ARC(MRC):__block

ARC:__weak\__unsafe_unretained

block的一些注意事项_第1张图片

1)当对block使用copy时,就自动将block函数内容从栈区复制到堆区

2)在block块中引用[p run],两者之间会产生一个强引用,最终导致循环引用

block的一些注意事项_第2张图片

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


block的一些注意事项_第3张图片
block的一些注意事项_第4张图片

当使用int age = 10 时,block块中会出现值捕获,即在工程编译时,age = 10;便会传递到block块中,及时在下面重新对age赋值,block块中的age值也不会发生改变,仍为10;

当使用——block int age = 10时,则将age改变成一个变量,每次对age 重新赋值,都会重新调用block块函数,从而age的值会不断发生改变。

当block和控制器相互引用时


你可能感兴趣的:(block的一些注意事项)