您的位置:首页 > 移动开发 > IOS开发

iOS 代理与block 逆向传值 学习

2015-08-15 10:01 267 查看
一般在项目中出现逆向传值的时候就需要用到代理、block 或者通知中心了。由于公司的项目底层封装的很好,所以项目做了三四个月就算碰到需要逆传的情况也不用自己处理。但是最近遇到了一个特别的情况就需要自己处理一下了,之前也在网上看了一下关于如何选择代理、block 或者通知中心。个人感觉代理和通知中心都比较简单,block稍为有点复杂。代理大家都会用,所以当时就选用了通知中心来处理。之后有一次公司的网实在太差了,出现了逆传数据失败的情况,引起了我的注意,打上断点之后才发现,通知中心的那个方法完全没有调用,猛然一想才记起,公司的控制器是自己写的,在离开当前控制器的时候,已经解绑了,一般都是默认在销毁的时候才去解绑,可能公司是全局处理在离开画页的时候就这样处理了,

后面想用一下block这种看起来高档的做法,而且也比代理写起来简单。其实说起block也简单,就三步骤,定义block属性,调用block,设置block内容。

当然代理我们用起来更简单,因为太熟悉了,后一个控制器设置一个协议,设置一个delegate,,在前一个控制器跳转到后一个控制器的时候,指定后一个控制器的代理为前一个控制器,然后前一个控制器遵守协议,再实现这个协议里的方法,在这个方法里会有后一个控制器传过来的数据。

再理理block的顺序吧。

定义block,设置block, 调用block

定义block和调用block是在一个位置的

设置block在另一个位置

那么在哪里定义这个block,在哪里调用呢

要传递出数据的控制器的h文件中要定义这个block属性并且用copy,至于为什么用copy,好像是不用copy的话,block就在栈区,过了就销毁了,用了copy之后block就移到了堆上,就相当于对象了,大概是这个意思。

在要传递数据的控制器定义block属性,然后,这个block属性是否有控制器(另一个控制器)设置这个block。

为什么另一个控制器要设置这个block,在要传递数据的控制器定义block属性里一般都会把要传递的数据,当然参数传到block中,然后另一个控制器只有在设置这个block时,才能把这个传递过来的在block中的当作参数的数据,进行操作,比如设置到自己的控件,属性上。

传递数据方,定义block属性,判断自己的block属性是真(有值,即被数据接收方设置把传递出的数据设置在自己)

数据接收方,设置这个block,把block中的参数(传递的数据)处理到适合的地方(控件显示,子控件分发,属性保存再次处理)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: