大学时曾经做过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. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  2. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  3. Asp.net Boilerplate源码中NotNullAttribute的用处

    看Asp.net Boilerplate 1.1.3.0源码时发现有一个NotNullAttribute的定义和27处的引用,就是不知道它的作用,当然顾名思义是可以的,就是不知道它是怎么判断的,在哪里 ...

  4. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  5. git提交项目到已存在的远程分支

    今天想提交项目到github的远程分支上,那个远程分支是之前就创建好的,而我的本地关联分支还没创建.   之前从未用github提交到远程分支过,弄了半个钟,看了几篇博文,终于折腾出来.现在把步骤整理 ...

  6. POJ3693 Maximum repetition substring [后缀数组 ST表]

    Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9458   Acc ...

  7. Vue.js——60分钟组件快速入门(上篇)

    组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML ...

  8. mono for android Listview 里面按钮 view Button click 注册方法 并且传值给其他Activity 主要是context

    需求:为Listview的Item里面的按钮Button添加一个事件,单击按钮时通过事件传值并跳转到新的页面. 环境:mono 效果: 布局代码 主布局 <?xml version=" ...

  9. .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono

    .NET Core 超强性能测试组件BenchmarkDotNet 支持Full .NET Framework, .NET Core (RTM), Mono. BenchmarkDotNet支持 C# ...

  10. WPF - 属性系统 (2 of 4)

    属性更改回调 前一章的示例中,对各个参数的设置都非常容易理解.如果我们仅仅需要创建一个独立的依赖项属性,那么上面所提到的创建依赖项属性的基础知识足以满足需求.但是事情往往并非如此完美.在一个系统中,很 ...