ios应用程序结构
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应用程序结构的更多相关文章
- 【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】
原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!! 先看官方 这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核 ...
- iOS/iPhone 程序文件目录结构以及启动流程
要想清晰的理解IOS应用程序的启动过程,毫无疑问需要深入了解一下ios应用程序的文件系统.一个ios应用程序都有一个属于自己沙盒(sandbox),应用沙盒就是文件系统目录,并且与文件系统的其他部分隔 ...
- iOS 应用程序目录结构
iOS应用程序采用的是沙盒原理设计,普及一下知识:沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限. 具体的特点有三点:1.每个应用程序都有自己的存储空间: ...
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)
25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- 25个增强iOS应用程序性能的提示和技巧--中级篇
25个增强iOS应用程序性能的提示和技巧--中级篇 标签: ios性能优化内存管理 2013-12-13 10:55 738人阅读 评论(0) 收藏 举报 分类: IPhone开发高级系列(34) ...
- 25个增强iOS应用程序性能的提示和技巧(初级篇)
25个增强iOS应用程序性能的提示和技巧(初级篇) 标签: ios内存管理性能优化 2013-12-13 10:53 916人阅读 评论(0) 收藏 举报 分类: IPhone开发高级系列(34) ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- 教程:如何减小iOS应用程序的大小?
本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装 ...
- 减小iOS应用程序的大小
减小iOS应用程序的大小 本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相 ...
随机推荐
- JavaScript 跨域漫游
前言: 最近在公司做了几个项目都涉及到了iframe,也就是在这些iframe多次嵌套的项目中,我发现之前对iframe的认识还是比较不足的,所以就静下心来,好好整理总结了iframe的相关知识:&l ...
- 浅玩JavaScript的数据类型判断
前言 平常在需要进行类型判断时,随手拿起typeof就像手枪一样只管突突突...也没有仔细的去了解它的具体特性. 所以这里就利用空闲时间,来做一个较为详细的了解. 首先我们来全面看一遍typeof类型 ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- 【Asp.Net Core】一、Visual Studio 2015 和 .NET Core 安装
安装 Visual Studio 和 .NET Core 1.安装 Visual Studio Community 2015,选择 Community 下载并执行默认安装.Visual Studio ...
- Maven对插件进行全局设置
并不是所有插件都适合从命令行配置,有些参数的值从项目创建到发布都不会改变,或者很少改变,对于这种情况,在POM文件中一次性配置就显然比重复在命令行中输入要方便了. 用户可以在生命插件的时候,对插件进行 ...
- python 学习笔记 -logging模块(日志)
模块级函数 logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root loggerlogging.debug().logging.info().lo ...
- 转载文章——Hadoop学习
转载地址:http://www.iteye.com/blogs/subjects/zy19982004?page=2 一.Hadoop社区版和发行版 社区版:我们把Apache社区一直开发的Hadoo ...
- hibernate注解CascadeType
http://blog.csdn.net/strong8808/article/details/6318994(参考) CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体, ...
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
- Junit mockito 测试Controller层方法有Pageable异常
1.问题 在使用MockMVC+Mockito模拟Service层返回的时候,当我们在Controller层中参数方法调用有Pageable对象的时候,我们会发现,我们没办法生成一个Pageable的 ...