大学时曾经做过android的开发,目前的工作是iOS的开发。之前自己记录东西都是通过自己比较喜欢的笔记类的应用记录下了。直到前段时一个哥们拉着我注册了一个博客。现在终于想明白了,博客这个东西受众会稍微广泛一些,自己写的比较粗烂的东西可以得到大家的指正,可能有一点点比较好的东西可以给大家提供一个思路,有交流才会有更大的进步嘛。废话不多说了。

  首先多人开发我还是比较倾向于使用XIB的,因为SB的多人开发并不是很方便。XIB又比纯代码布局界面更加直观,虽然有的时候我也会使用Masonry布局,但基本都是业务需要的时候。所以controller的解耦就变的比较重要了,push到下一个下一个controller的时候就不用非得import下一个controller类了,让多人合作的的时候不用过多的import,当然大量import会加大系统资源的开销,还会造成后期项目的维护性变差。下面我将结合正在工作项目和自己的心得写写。

  我就结合工程的代码介绍一下吧,文章最后会贴上我的代码地址。

  YRouterNavigationController是继承的系统的UINavigationController。主要的就是在AppDelegate里面实现把controller存储到config数组(此数组主要的功能是让唯一的URL和controller的名字一一对应),以便pop的时候去检查,并形成统一的风格。设置rootcontroller,push,pop,present等的就不再介绍了(push,pop,present的时候用的NSURL,可能不是很方便,大家可以在我的上面封装一个方法把str转换成url就可以啦)。基本上都是对系统方法的一个封装。我感觉找到解藕的最核心的是OC的runtime有这么一个方法——NSClassFromString,哈哈

  UIViewController+YRouterUIViewControllerCategory是一个UIViewController的Category。为什么要使用Category呢?主要是考虑到还有tableviewcontroller等的controller,tableviewcontroller也是uiviewcontroller的一个子类嘛。这样大家就都具有了本Category的技能了。另外push或者present的时候可以带一个字典的参数,这个参数是query的dic,其实本质上传参数还是用的KVC,只不过相当于把controller和参数做了一个绑定,就没有耦合度那么高的KVC了。这个传参的query实际使用到了objc_setAssociatedObject和objc_getAssociatedObject,哈哈没有接触过的同学自行google。啊,还有,controller默认设置了leftBarButtonItem(作为pop的返回),如果用不到的时候,请自行设置其为nil。

代码地址:https://coding.net/u/ysk/p/YRouter/git

  先写这么多吧。这个方案可能还会有很多不足之处,如果你参考了本方案,发现了不足,务必在下面评论告诉我,多谢啦。

 
 
 
 
 

iOS controller解耦探究实现——第一次写博客的更多相关文章

  1. 第一次写博客,关于前端开发deMVC在js中的应用

    对前端MVC MVC分别是model.view.controller的缩写,模型.视图.控制器.这些更加偏向于后台,在以前MVC是只属于后台的.当然随着技术的进步,前端的大牛们将后台的一些东西应用于前 ...

  2. 第一次写博客Poj1044

    Date bugs Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3005   Accepted: 889 Descript ...

  3. HDU 2064 菜鸡第一次写博客

    果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...

  4. 第一次写博客,就写如何向外行介绍自己做的是什么,那个我是做web的

    如果想外行问你是做什么的,改如何回答.和内行说java后台就可以了,但外行听不懂,我们该如何描述呢? 我的方法是:我做的是java web开发,不是内外的外,是个英文单词web,全名叫world wi ...

  5. Magazine Ad CodeForces - 803D(二分 + 贪心,第一次写博客)

    Magazine Ad The main city magazine offers its readers an opportunity to publish their ads. The forma ...

  6. 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)

    1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表)    例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...

  7. sikuli+eclipse对于安卓app自动化测试的应用(第一次写博客,有些语言还不太专业,望海涵)

    Sikuli是什么? 下面是来自于官网的介绍:Sikuli is a visual technology to automate and test graphical user interfaces ...

  8. ViewPager实现自动翻页功能 --转载出处找不到了,根据自己的理解写个随笔方便以后的记忆以及代码的共享,感谢给我启发的那位高手--第一次写博客哈

    xml文件 textview 用于显示图片的标题 viewpager 用于实现翻页效果 <LinearLayout xmlns:android="http://schemas.andr ...

  9. 写一下SPFA和迪杰斯特拉的模版。。。第一次写博客,有错请提出哦!

    SPFA的模版 #include<bits/stdc++.h> using namespace std; queue <int> q; typedef pair <int ...

随机推荐

  1. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  2. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  3. 超大 Cookie 拒绝服务攻击

    有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...

  4. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  5. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  6. 预览github里面的网页或dome

    1.问题所在: 之前把项目提交到github都可以在路径前面加上http://htmlpreview.github.io/?来预览demo,最近发现这种方式预览的时候加载不出来css,js(原因不详) ...

  7. iOS开发之ReactiveCocoa下的MVVM(干货分享)

    最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...

  8. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  9. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  10. J a v a 的“多重继承”

    接口只是比抽象类“更纯”的一种形式.它的用途并不止那些.由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一起——所以没有任何办法可以防止多个接口合并到一起.这一点是至关重要的 ...