界面通信的三种方法:
- 属性传值:将第一页页面的值传给第二个页面。
- 代理传值:实现界面传值要6步:
- 声明协议和协议的方法
- 声明代理
- 传值的内容
- 遵守协议
- 设置代理
- 调用协议的方法
- Block传值:用于页面之间通信,同时可以进行传值。(使用场景类似协议传值,都是解决从后一个页面往前一个页面传值问题)
void(^block)(void) = ^(void)
{ }; 其中:
1.void(^block)(void)是类型
2.block是变量名
3.^(void){};是block实现。//在block内部不能直接修改局部变量的值,如果想修改必须声明成__block类型的变量或者static 。
Block内存管理:没有使用局部变量的block内存存储在全局区。block内部使用局部变量的时候内存存储在栈区。
当block变量定义为属性的时候,必须使用copy修饰,retain无效,即retain和assign会造成野指针问题。
当对block进行copy操作的时候,此时block的内存区域为堆区。
当不使用block时需要使用Block_Release()进行销毁。
在非arc下使用_block修饰变量来防止循环引用。在arc下使用_weak修饰变量来防止循环引用。