代理、block传值、变量传递
2019-12-12 本文已影响0人
LPL_d5fc
传值可以使用通知、代理、block
场景:ViewController通过点击屏幕modal跳转到ModalViewController,然后在ModalViewController中点击屏幕,将一个字符串传给ViewController中(逆传)
代理传值
思路:
1.首先思考参数要从哪个控制器传出,由哪个控制器接收参数。确定后,在传参数的控制器中自定义协议,协议方法,并且设置代理属性(遵守自定义的协议)。
2.在需要传参数的方法中调用代理方法,传参,调用之前判断一下代理是否实现了代理方法。
3.想要代理方法生效,就要将接收参数的控制器设置为传出参数的控制器的代理。一般是在界面跳转的时候设置代理。设置代理后,代理方法才会被执行。设置代理后,要遵守协议,并实现代理方法,接收参数。
block传值
block传值要比代理简洁很多。
思路:
1.在传出参数的控制器创建block代码块属性。
2.在要传参数的方法中直接调用block,将参数传入即可。
3.在接收参数的控制器中,想在哪里获取接收到的参数,就利用传参的控制器的引用调用定义好的block,接收参数。
写到这里发现block传值比起代理传值,要简便了许多。
变量传递
如果是局部变量,block是值传递(图1、图2),接收变量后,再更改局部变量的数值,输出不会改变
如果是静态变量,全局变量,__block修饰的变量,block都是指针传递(按照图二的修改方式,就可以改变打印出a的值)
图1 图2