美文网首页编程iOS Developer移动端开发
iOS 页面传值(代理、通知、block、单例、属性)

iOS 页面传值(代理、通知、block、单例、属性)

作者: 殇鑫 | 来源:发表于2017-03-28 15:57 被阅读0次

    第一次写东西好紧张啊!有种写作文的感觉。第一次就写点基础性的、实用性的技术吧。开发过程中传值是我们经常面对的,正确、高效的传值可以提高我们的开发效率。


    一、传值分类

    页面传值基本分为两种:正向传值和反向传值。


    二、传值方式

    一说起传值大家都能想起几种,最基本的无非就是代理传值通知传值block传值 等等 有种传值大家也会经常用到属性传值,其实还有两种常用的 单例传值存储传值

    声明:文章之中都是firstPageController 跳转到secondPageController 不懂之处欢迎询问。

    1、代理传值

    之前我最新欢 代理传值了,简单明了、浅显易懂。我打一个不恰当的比喻,比如我想吃饭但我有不想去。哈哈你是不是想到了外卖,对的!我可以网上下单让送餐小哥送过来。代理传值其实跟点餐一个道理,只是他根本拿不到值所以才委托给别人让别人去帮他拿,有同鞋开始问了:万一的委托人拿的值不给它或者给错人了呢? 是的很有这种情况 所以他们就签了一个协议,有了这个协议就不会出错了。

    委托人做的事:

    1.1 声明委托变量。

    1.2 定义协议方法。

    1.3 调用委托方法

    secondPageController.h secondPageController.m

    代理人做的事:

    1.1 执行代理协议。

    1.2实现委托方法。

    firstPageController.m firstPageController.m

    2、通知传值

    通知大家应该都熟悉,通知人创建通知并发送, 接收人接受通知就OK了。通知完毕 注意移除掉,项目中通知太多并不好。

    发送通知: 监听者接收通知

    最后大家一定不要忘了把通知移除掉,最好在dealloc方法中移除。以免给大家造成不必要的麻烦。只有把代码写到最严谨才能把bug降到最低。移除通知一般遵循谁创建谁移除。在哪个控制创建就在哪个控制器里移除。这里暂时跟大家分享一下开发中最常用的两种移除方法。

    通知移除方法

    3、block传值

    刚开始使用block总感觉怪怪的 大概是因为它声明的时候比别人多了一个小帽吧。block是一个代码块,用来做为某一个工作完成时的回调。它有自己的内存管理机制,同学们大胆放心的用吧。其他的不过多的介绍这里只介绍使用方法。

    传值方:

    3.1 声明block属性用于传值。

    3.2 传值的时候调用block 完成传值。

    定义Block 完成回调传值

    接收方:

    传递一个block给传值方,并在block内捕获回调值的信息。

    捕获block里的传值

    是不是跟代理传值差不多,虽然写的时候有点别扭单用习惯了还是挺好用的。

    4、属性传值

    一般在页面传值的时候 正向传值经常用到。贴张代码一目了然。

    正向传值

    5、单例传值

    单例顾名思义就是单独一个实例,相当于一个静态变量(不是很合适暂时想不到好的)在整个工程中可以用作公共资源使用。单例分为系统单例和自定义单例。

    系统单例:

    系统单例主要由UIApplication实现。

    AppDelegate.h

    UIApplication使用方法

    AppDelegate 传值方法

    自定义单例:

    首先创建一个单例类 CustomDelegate

    CustomDelegate.h页面展示

    CustomDelegate.h

    CustomDelegate.m页面展示

    CustomDelegate.m

    6、存储传值

    请原谅我自己给他起了这个名字  有人用NSUserDefaults进行传值,这也不算错算是一种传值方式吧。NSUserDefaults是数据持久化的一种主要做存储使用。建议大家慎用。

    NSUserDefaults使用方法

    详细使用方法请参考文中链接。

    其实吧还有一个第三方比这些传值好用百倍那就是ReactiveCocoa。改天有时间给大家奉上。以上都是小弟拙见,有错误或者不妥之处欢迎指出。

    ReactiveCocoa(简单入门) 已经写好 想看的同鞋 可直接点击查看。

    参考文献:

    http://www.2cto.com/kf/201510/445014.html

    http://www.jianshu.com/p/459c15cf6ce2

    相关文章

      网友评论

        本文标题:iOS 页面传值(代理、通知、block、单例、属性)

        本文链接:https://www.haomeiwen.com/subject/cvfenttx.html