温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

反向传值的几种常用方法

发布时间:2020-07-01 15:26:12 来源:网络 阅读:388 作者:Jacksun2Coshine 栏目:开发技术

        最近项目完成的差不多了,闲下来的时间突然心血来潮想自己写写以前没用过的方法。这里就包含了几种常见的反向传值的方法。

        之所以现在专门自己写反向传值的博文记录,是因为之前几乎没怎么用到这些反向传值的方法,那么这里将会描述一下像“代理”、“block”、“通知”、“单例”这四种传值方法。

        首先是代理,也就是常看到的delegate。说的通俗点,就是委托一个对象,让其帮忙处理事情,说到底就是个中介的标志。详细方案如下:


反向传值的几种常用方法

在父类中调用其代理并传递参数


反向传值的几种常用方法

自定义代理的写法


                反向传值的几种常用方法

                                                            最后在代理中实现代理方法


        看得出来,只需要三步就可以完成一个代理的设置以及调用,既简单又方便,难怪会成为开发人员最钟爱的传值方法。再来是block的传值,可以说这个的地位跟代理是不相伯仲的,来看看它的写法:


反向传值的几种常用方法

反向传值的几种常用方法

          首先根据需要自定义一个block(参数自己决定,这里用耽搁字符串举例),设置为类的一个属性

反向传值的几种常用方法

                                                        然后在需要的地方把参数传进去

反向传值的几种常用方法

                               最后直接在需要的地方调用这个block,取出其中的数据即可


        没错,利用block进行传值一样只需要三步就能完成,同样既简洁又方便,而且省去设置代理和协议的设置,直接把自己作为代理对象,可谓简单粗暴,这也是为什么block这个写法看上去有点怪异的东西这么受开发者种爱的原因了。


        接下来是通知传值,这个是敝人经常用到的传值方法,说起来有点low,没办法,自己之前对其他的一些方法没花时间琢磨,而通知传值在我看来比较“方便”,所以一直沿用到现在。方法也不是很复杂:

反向传值的几种常用方法

注册一个观察者用于接受到通知后调用回调方法

反向传值的几种常用方法

在需要的方法发送包含数据的通知(可以是字典,这里直接用单一个字符串举例)

反向传值的几种常用方法

                                                                最后响应通知回调方法即可


        仍然只需要三步,仍然非常简洁方便,跟代理类似,注册观察者即为设置代理,通知回调即为代理方法,只是传递的参数类型统一为(NSNotification *),处理起来可能要麻烦几步。 这里要注意的是,只有预先注册了观察者的地方,才会在发送完通知后启用回调方法,而且每个通知的回调也只有一次。就像广播,只播送一次,听到的人才会有反馈。看上去很美好,实际上是用起来比较麻烦,因为你要自己在需要的地方把数据存储到相应的通知中,当数据量大的时候一般会选用字典来存储,会比较麻烦,回调的方法也需要自己来写,所以在开放过程中用到的几率不是很高,当然的,还是要清楚用法哟。


        最后是单例传值,我记得当初教我的老师就提到过这是他最喜欢用的一种传值方法。同样贴上使用步骤:


反向传值的几种常用方法

.h文件中的写法

反向传值的几种常用方法

.m文件中实现单例的创建方法,把需要初始化的属性记得初始化一下

反向传值的几种常用方法

反向传值的几种常用方法

                                                    引入单例,保存数据到单例对象的属性中

反向传值的几种常用方法

                                最后在需要用到地方拿出单例对象,取出它的属性进行使用即可


        满打满算也差不多是三步,这么看基本上这几种方法好像步骤都很简单啊~老实说我看着也是简单,但是实际上你得想清楚,在使用单例传值时,你不得不单独的去创建.h和.m文件,而这个单例可能只用到某一个地方,那一般的项目中需要反向传值的地方是很多的,如果每个地方都用单例,就有可能会要创建很多的单例对象的文件,想想也是麻烦,因为不能像代理和block那样直接写到对应的类里面,总归来说还是比较麻烦的,所以这种方法也是看到的比较少。


        以上提到的四种传值方法并不只是针对反向的,而是反向传值中常用的,像没有提到的偏好设置等也是可以用来传值的,这里就不说了。总结来说,几种方法都是不错的,各有各的受众面,一般来说,在对象不多的文件里推荐用单例即可实现各文件的无障碍传值,而相对的传值频繁而且对象复杂的文件里则推荐代理和block,至于通知的话并没有比前2种更好,由你自己取舍啰~




向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI