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

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


一、传值分类

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


二、传值方式

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

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

1、代理传值

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

委托人做的事:

1.1 声明委托变量。

1.2 定义协议方法。

1.3 调用委托方法

iOS 页面传值(代理、通知、block、单例、属性)_第1张图片
secondPageController.h
iOS 页面传值(代理、通知、block、单例、属性)_第2张图片
secondPageController.m

代理人做的事:

1.1 执行代理协议。

1.2实现委托方法。

firstPageController.m
iOS 页面传值(代理、通知、block、单例、属性)_第3张图片
firstPageController.m

2、通知传值

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

iOS 页面传值(代理、通知、block、单例、属性)_第4张图片
发送通知:
iOS 页面传值(代理、通知、block、单例、属性)_第5张图片
监听者接收通知

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

iOS 页面传值(代理、通知、block、单例、属性)_第6张图片
通知移除方法

3、block传值

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

传值方:

3.1 声明block属性用于传值。

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

定义Block
iOS 页面传值(代理、通知、block、单例、属性)_第7张图片
完成回调传值

接收方:

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

iOS 页面传值(代理、通知、block、单例、属性)_第8张图片
捕获block里的传值

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

4、属性传值

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

iOS 页面传值(代理、通知、block、单例、属性)_第9张图片
正向传值

5、单例传值

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

系统单例:

系统单例主要由UIApplication实现。

iOS 页面传值(代理、通知、block、单例、属性)_第10张图片
AppDelegate.h

UIApplication使用方法

iOS 页面传值(代理、通知、block、单例、属性)_第11张图片
AppDelegate 传值方法

自定义单例:

首先创建一个单例类 CustomDelegate

CustomDelegate.h页面展示

iOS 页面传值(代理、通知、block、单例、属性)_第12张图片
CustomDelegate.h

CustomDelegate.m页面展示

iOS 页面传值(代理、通知、block、单例、属性)_第13张图片
CustomDelegate.m

6、存储传值

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

NSUserDefaults使用方法

iOS 页面传值(代理、通知、block、单例、属性)_第14张图片

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

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

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

参考文献:

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

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

你可能感兴趣的:(iOS 页面传值(代理、通知、block、单例、属性))