凡是程序的开发者,应该对程序的架构都不陌生。一个程序的架构的好坏对这个程序有着非常重要的作用。今天我们来看一下iOS开发中用要的两种主流的程序架构。这个过程中我们主要以例子的形式展开。

  我们来看第一种架构:如下图所示:

   这种程序的架构主要原理是创建了一个导航控制器来控制页面之间的切换。这种架构一般把主界面作为导航控制器的根视图控制器。在上图所求的程序架构中,主界面管理了四个界面:微信界面,发现界面,联系人界面,关于我界面。如果程序是第一次运行的时候,进入用户指引界面,然后进入登录界面,输入账户名和密码进入主界面。 在关于我界面中有两种情况:1.在程序中的关于我界面中退出登录后,下次进入程序的时候应该进入登录界面,然后输入账户名和密码进入主界面。 2.有这种需求,在关于我这个界面中查看用户指引界面。

  这种程序的架构的思路就是在用到哪个界面的时候,把该界面的的头文件包含进来。用导航控制器把这个界面push压栈,来实现页面之间的切换。当需要用到主界面的时候,popToRoot就实现了到主界面的切换。

  但是这种架构的缺点是什么呢:

  1.我们来分析一下整个程序。因为主界面是导航控制器的根视图控制器。由于根视图控制器在导航控制器的栈里是不能出栈的,这是导航控制器的特性决定的。而在这种架构中主界面又包含了四个界面。在程序的运行过程中或者是存在后台运行的话,主控制器的Home页面太大了,并且一直存在内存中运行,会造成内存的开销很大。

  2.每当程序重新进入的时候,需要更新主界面中的状态。例如:当在关于我的界面中退出的时候,下次重新登录的时候,如果不更新主界面的状态的话。会直接进入关于我的这个界面中。这种需求并不是我们想要的状态。

  下面我们来看第二种架构。

   

   很明显可以看到,这个架构会更加清析,更加明了。我们来说一下这个程序的原理:这个程序的架构是先通过创建一个继承自NSObject对象的主控制器,通过这个主控制器来管理页面之间的切换。我们都知道一个程序一般只有一个window,通过改变window的根视图控制器来实现不同页面之间的切换。

  同样的,没有完美的架构,只有更适合的。我们接下来看看这个架构中存在的优缺点。

  1.我们先来说下优点。显然,这个程序架构的思路很是清楚。在复杂的页面之间的切换的时候,不需要反复包含切换页面的头文件 。在程序的执行过程中,只需要找到清楚的知道到底谁才是window的根视图控制器就可以实现不同页面之间的切换。当然这个架构中最主要的工作就是想办法对主控制器方法的封装。

  2.我们接下来看下这个架构的缺点:这里没有了导航控制器,在内存中一直存在的就剩下主控制器(mainViewController)了,但是,仔细考虑会发现,这个架构中,会对主控制器管理的其它页面进行反复的申请内存和销毁,同样的主界面包含很多页面。这样也会影响程序的执行效率。

  所以,综上,第二种架构一般多用于ARC环境中使用。

  为了程序的执行效率,一种很好的解决方案就是把主控制器(mainViewController)做成一个单例的对象,单例的对象在整个程序的运行过程中只有一个对象,避免了,使用的时候重新申请内存造成的不必要的开销。而其它三个界面一般会把它们做成@property类别。这样就能保证当重新载入新的页面的时候先判断是否在内存中。如果在的话就直接取出来就行。

iOS中的两种主要架构及其优缺点浅析的更多相关文章

  1. iOS中的两种搜索方式UISearchDisplayController和UISearchController

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 以前iOS的搜索一般都使用UISearchDisplayCon ...

  2. ios中的几种多线程实现

    iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式:1, Thread;2, Cocoa ...

  3. MySQL中的两种临时表

    MySQL中的两种临时表 伯乐在线2016-07-06 05:16:52阅读(4556)评论(3) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 ...

  4. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  5. Linux中的两种守护进程stand alone和xinetd

    Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...

  6. validate插件:验证密码没有空格 用户名是5-10位 至少包含数字和大小写字母中的两种字符

    //校验密码是否含有空格 jQuery.validator.addMethod("notblank", function(value, element) { var pwdblan ...

  7. Crystal Report在.net中的两种显示方式

    Crystal Report在.net中的两种显示方式 编写人:CC阿爸 2014-7-29 近来在完成深圳一公司的项目,对方对各方面要求相当严格,一不满意就拒绝签收,为了对修正水晶报表显示及导出的一 ...

  8. C#中的两种debug方法

    这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下   第一种:需要把调试方法改成debug代码用 #if DEBU ...

  9. eclipse中的两种Jre 及 Jre与Jdk的区别

    分类: ——————————区分eclipse中的两种Jre———————- (Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境.如果你的机器上没有安装任何JRE(或者JDK ...

随机推荐

  1. 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

    题目1373:整数中1出现的次数(从1到n整数中1出现的次数) 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他 ...

  2. BZOJ4525——[Usaco2016 Jan]Angry Cows

    1.题意:给一堆可以的限制长度的区间...区间的长度是你控制的...但是只有一个长度...求最短长度覆盖所有的点 2.分析:发现可以二分...那二分吧.....然后我们从头向后扫一遍直接判断能否直接覆 ...

  3. [转载]PO BO VO DTO POJO DAO概念及其作用

    原文链接:http://jeoff.blog.51cto.com/186264/88517/ POJO = pure old java object or plain ordinary java ob ...

  4. PHP微信支付开发实例

    这篇文章主要为大家详细介绍了PHP微信支付开发过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PHP微信支付开发过程,分享给大家,供大家参考,具体内容如下 1.开发环境 Thinkphp 3. ...

  5. JavaScript之函数

    控制语句(switch) switch(name){ case '1': age = 123; break; case '2': age = 456; break; case '3': age = 7 ...

  6. 转:jQuery弹出二级菜单

    <html> <head> <meta http-equiv="content-type" content="text/html; char ...

  7. CDN——到底用还是不用?

    最近在学bootstrap,在知乎上搜索bootstrap看到有人问bootstrap基础包体积较大,对性能影响会不会很大,看到两种方法来减少对性能的影响: 有选择地部分加载,bootstrap带有L ...

  8. word to word

    Question: For each word, you can get a list of neighbor words by calling getWords(String), find all ...

  9. Sum of Left Leaves

    Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...

  10. Unity3d《Shader篇》自定义光照模型

    一.理论 公式1:被光照的物体最终所呈现的颜色公式 最终颜色=材质颜色*发光颜色 公式2:材质颜色 tex2D(_MainTex,uv) 公式3:光照颜色 光照颜色=自发光+环境光+漫反射+镜面反射 ...