MVC开发模式

什么是mvc,相信有一定开发经验的程序员都应该知道。

M —— 模型,为程序提供数据

V —— 视图,为用户提供界面

C —— 控制器,用来控制程序视图,即上面的V

在ios程序中,一个控制器对应一个视图。为用户呈现的是哪一个界面,由控制器决定。

下图是xcode所创建的singleView程序的标准文件。

图中的ViewController实际上就是控制器,而Main.storyboard的作用就是用来创建视图的。因为xcode不知道你要提供什么数据,所以它不会帮你创建模型文件,一般这个责任都落在开发者自己的身上。

视图是怎样被创建的(UIScreen,UIWindow)

我们都知道,所有的界面都是画出来的。因此,如何画,在哪里画就是一个问题。先不谈论如何画,我们说说在哪里画。借用官方的一张图片说一下

在图中,程序画了一个文本和一个按钮,这些东西实际上都是在window(是一个UIWindow类)上画的。

既然要画东西,我们就必须知道画纸(window)的尺寸,而这个window的尺寸就是屏幕的尺寸,一个UIScreen类代表一个屏幕,所以我们使用UIScreen类实例的尺寸初始化window的尺寸。在某些程序中往往会见到下面的代码就是这个原因。

应用程序的生命周期,管理程序的状态切换

由程序启动到被销毁,都会有一个阶段,我们可以在不同的阶段做不同的事情。AppDelegate文件就为我们提供了这个方便之门。AppDelegate类遵从了UIApplicationDelegate协议。该协议的主要工作是对程序的不同状态作出响应。程序的状态主要有:

  • 未运行:程序没有被用户或系统启动,或者已经被终止
  • 未激活:程序已经被转到前台执行,但是它还不能接收到事件,这个阶段通常很短暂。
  • 激活:程序这个时候已经可以处理事件,或者可以说正在和用户交互。
  • 后台运行:用户不可见,但是仍然有能力执行一些代码。
  • 挂起:程序依然驻留在内存中,但是无法执行任何代码。

下图足以说明程序的状态是怎样切换的。

不同阶段对应执行的方法:

启动阶段:

application:willFinishLaunchingWithOptions:

application:didFinishLaunchingWithOptions:

切换到前台:

applicationDidBecomeActive:

切换到后台:

applicationDidEnterBackground:

切换到未激活状态:

applicationWillResignActive: (当程序由前台状态离开时执行)

applicationWillEnterForeground: (当程序从后台状态离开时执行)

终止:

applicationWillTerminate:

前面我们说的window属性应该在哪里初始化呢,相信不用说大家都知道了:

application:willFinishLaunchingWithOptions:

因为在程序被激活之前我们就应该对相应的属性进行初始化完毕,把window属性定义在AppDelegate类里面进行初始化再适合不过了。

最新文章

  1. 转: Delphi的OverRide、OverLoad和Virtual方法
  2. 在macOS Sierra 10.12搭建PHP开发环境
  3. DELL R710服务器做RAID5磁盘阵列图文教程
  4. BackgroundWorker的使用方法
  5. 【Python】django权限管理
  6. QT 十六进制字符串转化为十六进制编码
  7. IEEE 802.15.4协议学习之物理层
  8. struts2结合生成验证码
  9. JS实现日历控件选择后自动填充
  10. 利用EntityFramework获得双色球数据库
  11. java 字符串大小比较
  12. [转载] 深入剖析 redis 主从复制
  13. Locally Weighted Linear Regression 局部加权线性回归-R实现
  14. 多管齐下显神威-2017逐浪CMS开启全新建站与WEB技术革命
  15. 海纳百川而来的一篇相当全面的Java NIO教程
  16. Social Grouping for Multi-Target Tracking and Head Pose Estimation in Video(翻译)
  17. Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed.
  18. delphi中Webbrowser疑难问题集锦<转>
  19. Linux 系统目录介绍
  20. glob模块--查询一个文件名列表

热门文章

  1. TeamCity : 自动触发 Build
  2. Qt 拷贝文件目录
  3. WinForm 对Web Api 增 册 改 查 的基本操作
  4. C# 拷贝指定文件夹下的所有文件及其文件夹到指定目录
  5. dbutils基本使用
  6. php的http_build_query使用
  7. Css3新特性总结之边框与背景(一)
  8. js—模糊查询
  9. 在 ASP.NET CORE 中使用 SESSION
  10. mvc mvp mvvm模式的区别