Block的简单使用
Block的本质是结构体指针,苹果官方文档给出的定义:

基本的定义方法:

1.__block 的使用
想在block内部对其外部的局部变量进行修改:

编译报错,因此需要在要修改的变量前添加 __block 关键字。

__block 的意思是将 _block 修饰的变量从栈中 copy到堆中去。
关于堆区与栈区的区别:栈区主要存放局部变量,定义的参数等,在函数结束,系统会自动回收其内存空间,而堆区一般用程序员自行分配释放,若程序员不释放,程序结束时,由系统回收。总的来说,使用栈区更为快捷,而使用堆区更为灵活。
2.Block中的循环引用
Retain cycle :循环引用指两个对象相互强引用了对方,即retain了对方,从而导致谁也释放不了谁的内存泄露问题。
使用block时,如下会出现循环引用:

此时self(当前界面)强引用了 此block ,而在block中又将self拷贝到了堆中,即retain了一次self,就会双向强引用,两个对象都不会被释放,从而引起循环引用。
可以使用__weak来解决:

使用block可以实现界面传值,使用起来非常方便,作用等同于代理。

浙公网安备 33010602011771号