IOS的两种框架设计思想
不管是任何一门语言,架构设计永远在其中占据着十分重要的作用,一个好的架构思想能够让程序的流程更加清晰,能够让程序工作的更加简单而有效。如果没有架构思想的话,那么所有的程序设计都将沿着一条设计思路走下去,程序设计将完全失去了活力,只剩下了千篇一律的代码编写,修改,调试;有了代码架构,我们将在程序的思想上投入更大的精力,投入更多的时间与精力去创造一些便利程序设计的结构,这将使程序的结构更加多样化,便利化,也会使你在学习工作的过程中事半功倍。
说了这么多,似乎总是没有什么有力的证据来印证这么一些话,我们以创建一个用户登录页面的流程作为目的,来看看不同架构方法的差异,那么我们就以下面的两种架构思想来做一下比较分析,主要的功能实现如下图所示(箭头所示为跳转方向):(1) 用户在首次登录的时候要使用userGuide页面 ;(2)用户在非首次登录时进入登录页面需要鉴权; (3)用户在记住密码时要直接进入首页;(4)在注销时回到主页面。
(一) 使用导航控制器进行视图之间的切换(如上左图所示)
首先为什么要将tabBar作为window的根控制器 :由于在程序的正常执行过程中,我们通常都是在主页面上操作,已经无关用户引导页面和登录页面了,若是采用先导航后登录的顺序,然后做相应的判断,push进相应的controller,那么在进入主界面之后我们的用户引导页面和登录页面将一直存在于导航控制器的底部,无法释放掉而造成占用系统内存空间的情况。
从图中的这种程序走向来看,通过Push方式推出的controller之间,关联性太大,文件之间相互包含,耦合性太强。例如在登录过程中,我们需要先判断一次是否首次登录,如果是首次登录,我们就直接push到userGuide controller,再到loginPage页面完成登录,由于window 的rootViewController是主页面,所以我们只需要popToRootViewController就能回到主页面了,但在主页面fourthView中,我们注销回到登录页面又要用到push to loginPage。这样在整个程序的执行过程中,文件之间相互包含,造成了文件之间的依赖性太大。
(二) 我们创建一个类,使用这个类来实现controller之间的相互转换(如上右图所示)
有鉴于以上方法的劣势,我们采用一种更加方便有效的方法,创建一个类用来管理页面之间的切换,通过改变window的rootViewController来实现,这样,在登录的过程中,controller之间的切换则完全可以用class进行,而各controller之间则相互独立,文件之间的关联性大大降低,在任意页面,只要包含class类就可以跳转到其所包含的controller中,从结构上看,较上一种方式流程更加清晰,明确,结构更加简单。