凡是程序的开发者,应该对程序的架构都不陌生。一个程序的架构的好坏对这个程序有着非常重要的作用。今天我们来看一下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. mac os 基本命令

    unix 系统命令行 ,仅供参考   目录操作   命令名 功能描述 使用举例   mkdir 创建一个目录 mkdir dirname   rmdir 删除一个目录 rmdir dirname   ...

  2. phpcms二次开发学习

    1.新建模块就是phpcms/modules/目录下面新建文件夹,文件夹名即为模块名. 2.模块内 一般新建三个文件夹:classes(模块要使用的类放置在这个文件夹,通过pc_base::load_ ...

  3. BZOJ3052——糖果公园

    0.题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 1.题目大意:给定一颗n个点的无根树,每个点有一个颜色,要进行q次操作,有两种操 ...

  4. 理解js中this的指向

         学习自原文  http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...

  5. Homework

    #include<stdio.h> #include<math.h> int main() { int a,b,c,l,p,s; printf("请输入三个数:&qu ...

  6. SqlServer coalesce函数

    SqlServer数据库中coalesce函数用法:在SqlServer2005中有了新的函数,它非常的实用,它就是coalesce函数,此函数可以返回参数中的第一个非空表达式,当你要在N个字段中选取 ...

  7. sharepoint 2010 页面刷新时滚动条位置保持不变 Controlling scrollbar position on postback

    sharepoint 2010 页面刷新时滚动条位置保持不变 Controlling scrollbar position on postback在sharepoint 2010中,如果当前页面的篇幅 ...

  8. POJ 2676

    http://poj.org/problem?id=2676 深搜的题目. 题意呢就是一个数独的游戏,应该都知道规则. 思路:我的思路很简单,就是用数组来判断某个数字是否可以使用,而每一个数字都由三个 ...

  9. mysql的innodb中事务日志ib_logfile

    mysql的innodb中事务日志ib_logfile事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节开启几组日志来服务于当 ...

  10. C# 静态函数调用窗体控件

    回调函数方法是静态函数,需要调用窗体控件,赋值或取值. 定义 public static Form1 mainFrm;   mainFrm = this; public partial class F ...