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类里面进行初始化再适合不过了。

ios应用程序结构的更多相关文章

  1. 【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】

    原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!! 先看官方 这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核 ...

  2. iOS/iPhone 程序文件目录结构以及启动流程

    要想清晰的理解IOS应用程序的启动过程,毫无疑问需要深入了解一下ios应用程序的文件系统.一个ios应用程序都有一个属于自己沙盒(sandbox),应用沙盒就是文件系统目录,并且与文件系统的其他部分隔 ...

  3. iOS 应用程序目录结构

    iOS应用程序采用的是沙盒原理设计,普及一下知识:沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限. 具体的特点有三点:1.每个应用程序都有自己的存储空间:  ...

  4. 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)

    25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...

  5. 25个增强iOS应用程序性能的提示和技巧--中级篇

    25个增强iOS应用程序性能的提示和技巧--中级篇 标签: ios性能优化内存管理 2013-12-13 10:55 738人阅读 评论(0) 收藏 举报  分类: IPhone开发高级系列(34)  ...

  6. 25个增强iOS应用程序性能的提示和技巧(初级篇)

    25个增强iOS应用程序性能的提示和技巧(初级篇) 标签: ios内存管理性能优化 2013-12-13 10:53 916人阅读 评论(0) 收藏 举报  分类: IPhone开发高级系列(34)  ...

  7. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  8. 教程:如何减小iOS应用程序的大小?

    本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装 ...

  9. 减小iOS应用程序的大小

    减小iOS应用程序的大小 本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相 ...

随机推荐

  1. C# 引用类型和值类型

    C# 引用类型和值类型 CLR支持两种类型:引用类型和值类型. 1.引用类型 (1)内存必须从托管堆上分配: (2)堆上分配的每个对象都有一些额外成员(包括“类型对象指针”,“同步块索引”),这些成员 ...

  2. php mail 函数发送邮件

    当然你可以通过php ,在自己的站点制作一个反馈表单, 我这次的需求是用email 的形式发送数据报表,结构比较简单 // 收件人地址(此处只可以写一个地址,写多个地址,只有最后一个地址生效) $to ...

  3. Xshell显示中文乱码问题

    [文件]–>[打开]–>在打开的session中选择连接的那个,点击[属性] -> [终端], 编码选择为:Unicode(UTF-8),然后重新连接服务器即可.也可以在Xshell ...

  4. 开始我的IT博客之旅

    这是一个好的开始,过程很漫长,但我却乐在其中. 在大学之际,这是我的又一个开始,随便写点啦. 想把每一次的过程记录下来 这样以后对自己 对别人都会有所帮助. 好啦 作为一名大三的学生党  加油吧!

  5. 超小Web手势库AlloyFinger原理

    目前AlloyFinger作为腾讯手机QQ web手势解决方案,在各大项目中都发挥着作用. 感兴趣的同学可以去Github看看:https://github.com/AlloyTeam/AlloyFi ...

  6. 原创 C++之常量(二)

    4常量的内存分配 4.1应用程序的内存结构 一个由C++编译的应用程序,占用的内存可以划分为如下几个部分: 栈(stack).由编译器自动分配释放.存放函数参数和函数里的局部变量(又称自动变量).其操 ...

  7. ORA-00600: internal error code, arguments: [4194]

    使用PlateSpin复制出来的一数据库服务器(Oracle 10g)在启动数据库实例时遇到"ORA-00600: internal error code, arguments: [4194 ...

  8. mysql 触发器

    触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发, 比如当 ...

  9. Thread Object wait() notify()基本

    package com.thread.test.thread; import java.util.ArrayDeque; import java.util.Queue; import java.uti ...

  10. linux 安装mysql数据库——tar.gz包解压安装法

    mysql数据库有多种安装方式,本文只介绍在Linux服务器上的tar.gz包解压安装法, 先通过mysql官网或者网络资源下载 mysql-5.7.3-m13-linux-glibc2.5-x86_ ...