第一次写东西好紧张啊!有种写作文的感觉。第一次就写点基础性的、实用性的技术吧。开发过程中传值是我们经常面对的,正确、高效的传值可以提高我们的开发效率。
一、传值分类
页面传值基本分为两种:正向传值和反向传值。
二、传值方式
一说起传值大家都能想起几种,最基本的无非就是代理传值、通知传值、block传值 等等 有种传值大家也会经常用到属性传值,其实还有两种常用的 单例传值、存储传值。
声明:文章之中都是firstPageController 跳转到secondPageController 不懂之处欢迎询问。
1、代理传值
之前我最新欢 代理传值了,简单明了、浅显易懂。我打一个不恰当的比喻,比如我想吃饭但我有不想去。哈哈你是不是想到了外卖,对的!我可以网上下单让送餐小哥送过来。代理传值其实跟点餐一个道理,只是他根本拿不到值所以才委托给别人让别人去帮他拿,有同鞋开始问了:万一的委托人拿的值不给它或者给错人了呢? 是的很有这种情况 所以他们就签了一个协议,有了这个协议就不会出错了。
委托人做的事:
1.1 声明委托变量。
1.2 定义协议方法。
1.3 调用委托方法
secondPageController.h secondPageController.m代理人做的事:
1.1 执行代理协议。
1.2实现委托方法。
firstPageController.m firstPageController.m2、通知传值
通知大家应该都熟悉,通知人创建通知并发送, 接收人接受通知就OK了。通知完毕 注意移除掉,项目中通知太多并不好。
发送通知: 监听者接收通知最后大家一定不要忘了把通知移除掉,最好在dealloc方法中移除。以免给大家造成不必要的麻烦。只有把代码写到最严谨才能把bug降到最低。移除通知一般遵循谁创建谁移除。在哪个控制创建就在哪个控制器里移除。这里暂时跟大家分享一下开发中最常用的两种移除方法。
通知移除方法3、block传值
刚开始使用block总感觉怪怪的 大概是因为它声明的时候比别人多了一个小帽吧。block是一个代码块,用来做为某一个工作完成时的回调。它有自己的内存管理机制,同学们大胆放心的用吧。其他的不过多的介绍这里只介绍使用方法。
传值方:
3.1 声明block属性用于传值。
3.2 传值的时候调用block 完成传值。
定义Block 完成回调传值接收方:
传递一个block给传值方,并在block内捕获回调值的信息。
捕获block里的传值是不是跟代理传值差不多,虽然写的时候有点别扭单用习惯了还是挺好用的。
4、属性传值
一般在页面传值的时候 正向传值经常用到。贴张代码一目了然。
正向传值5、单例传值
单例顾名思义就是单独一个实例,相当于一个静态变量(不是很合适暂时想不到好的)在整个工程中可以用作公共资源使用。单例分为系统单例和自定义单例。
系统单例:
系统单例主要由UIApplication实现。
AppDelegate.hUIApplication使用方法
AppDelegate 传值方法自定义单例:
首先创建一个单例类 CustomDelegate
CustomDelegate.h页面展示
CustomDelegate.hCustomDelegate.m页面展示
CustomDelegate.m6、存储传值
请原谅我自己给他起了这个名字 有人用NSUserDefaults进行传值,这也不算错算是一种传值方式吧。NSUserDefaults是数据持久化的一种主要做存储使用。建议大家慎用。
NSUserDefaults使用方法
详细使用方法请参考文中链接。
其实吧还有一个第三方比这些传值好用百倍那就是ReactiveCocoa。改天有时间给大家奉上。以上都是小弟拙见,有错误或者不妥之处欢迎指出。
ReactiveCocoa(简单入门) 已经写好 想看的同鞋 可直接点击查看。
参考文献:
网友评论