深度解析iOS应用程序的生命周期
来源:互联网 发布:mac 如何设置密码 编辑:程序博客网 时间:2024/06/09 16:24
- 业界
- 移动开发
- 云计算
- 软件研发
- 程序员
- 极客头条
- 专题
- Android
- iOS
- 移动游戏
- 近匠
- Swift
- 智能硬件
- HTML5
深度解析iOS应用程序的生命周期
发表于2015-06-23 11:05| 8494次阅读| 来源CSDN| 9 条评论| 作者刘耀柱
iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有App来运行,而你提供自己编写的代码来定制App的外观和行为。因此,了解iOS Infrastructure和它们如何工作对编写App是很有帮助的。
Main函数入口
所有基于C编写的App的入口都是main函数,但iOS应用程序有点不同。不同就是你不需要为iOS应用程序而自己编写main函数,当你使用Xcode创建工程的时候就已经提供了。除非一些特殊情况,否则你不应该修改Xcode提供的main函数实现。示例代码如下:
- #import <UIKit/UIKit.h>
- #import "AppDelegate.h"
- int main(int argc, char * argv[])
- {
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
- }
上面实例代码中有一个很重要的函数UIApplicationMain,它主要是创建App的几个核心对象来处理以下过程:
- 从可用Storyboard文件加载用户界面;
- 调用AppDelegate自定义代码来做一些初始化设置;
- 将App放入Main Run Loop环境中来响应和处理与用户交互产生的事件。
应用程序的架构
iOS应用程序都遵循Model-View-Controller的架构,Model负责存储数据和处理业务逻辑,View负责显示数据和与用户交互,Controller是两者的中介,协调Model和View相互协作。它们的通讯规则如下:
1. Controller能够访问Model和View,Model和View不能互相访问。
2. 当View与用户交互产生事件时,使用target-action方式来处理。
3. 当View需要处理一些特殊UI逻辑或获取数据源时,通过delegate或data source方式交给Controller来处理。
4. Model不能直接与Controller通信,当Model有数据更新时,可以通过Notification或KVO (Key Value Observing)来通知Controller更新View。
了解iOS的MVC设计模式之后,我们从下图来了解在MVC模式下iOS应用程序有哪些关键对象以及它们职责主要是什么?
- UIApplication对象
用户与iOS设备交互时产生的事件(Multitouch Events,Motion Event,Remote Control Event)交由UIApplication对象来分发给control objects(UIControl)对应的target objects来处理并且管理整个事件循环,而一些关于App运行时重要事件委托给app delegate来处理。
- App delegate对象
App delegate对象遵循UIApplicationDelegate协议,响应app运行时重要事件(app启动、app内存不足、app终止、切换到另一个app、切回app),主要用于app在启动时初始化一些重要数据结构;例如,初始化UIWindow,设置一些属性,为window添加rootViewController。
- View controller对象
View Controller有一个view属性是view层次结构中的根view,你可以添加子view来构建复杂的view;controller有一些viewDidLoad、viewWillAppear等方法来管理view的生命周期;由于它继承UIResponder,所有还会响应和处理用户事件。
- Documents和data model对象
data model对象主要用来存储数据。例如,饿了么app在搜索切换地址后,有历史记录搜索地址历史,当app下次启动时,读取和显示搜索地址历史。
document对象(继承UIDocument)用来管理一些或所有的data model对象。document对象并不是必须的,但提供一种方便的方式来分组属于单个文件或多个文件的数据。
- UIWindow对象
UIWindow对象位于view层次结构中的最顶层,它充当一个基本容器而不显示内容,如果想显示内容,添加一个content view到window。
它也是继承UIResponder,所以它也是会响应和处理用户事件。
- View、control、layer对象
View对象可以通过addSubview和removeFromSuperview 等方法管理view的层次结构,使用layoutSubviews、layoutIfNeeded和setNeedsLayout等方法布局view的层次结构,当你发现系统提供view已经满足不了你想要的外观需求时,可以重写drawRect方法或通过layer属性来构造复杂的图形外观和动画。还有一点,UIView也是继承UIResponder,所以也能够处理用户事件。
Control对象通常就是处理特定类型用户交互的View,常用的有button、switch、text field等。
除了使用View和Control来构建view层次结构来影响app外观之外,还可以使用Core Animation框架的Layer对象来渲染view外观和构建复杂的动画。
Main Run Loop
一个iOS应用程序的main run loop主要作用是处理所有与用户相关的事件。UIApplication对象在启动时就设置main run loop和使用它来处理事件和更新基于view的界面。正如它的名字显示,main run loop是运行在应用程序的主线程。这样就确保与接收到用户相关的事件被有序地处理。
下图显示main run loop的架构和用户事件最终是怎样被应用程序处理。当用户与设备交互时,系统就会生成与交互关联的事件,然后被应用程序的UIKit通过一个特殊的端口来分发。应用程序把事件放入队列,然后逐个分发到main run loop来执行。UIApplication对象是第一个对象接收到事件,然后决定怎样处理它。一个touch event通常都被分发到main window对象,然后依次分发到发生触碰的view。其他event的接收事件对象路径可能有点不同。
大多数的事件通过使用main run loop来分发,但有些不是。有些事件被发送到一个delegate对象或传递到你提供的block中。想了解更多如何处理大多数类型的事件,其中包括touch、remote control、motion、accelerometer和gyroscopic等事件,请查阅Event Handle Guide for iOS。
本文导读
- 第1页:深度解析iOS应用程序的生命周期
- 第2页:delegate对象方法汇总以及应用程序的终止
- 顶
- 11
- 踩
- 2
- 相关文章
- 最新报道
- iOS开发实践:用Swift和Core Animatoin创建圆形图片加载动画
- iOS开发的22个奇谲巧技
- 手把手教学:详解Swift中的iOS设计模式
- 被滥用的移动UX模式
- 深入理解Objective-C的Runtime机制
- Android应用架构变更背后的经验、失误与推论
- CSDN官方微信
- 扫描二维码,向CSDN吐槽
- 微信号:CSDNnews
微博关注
相关热门文章
- 拥抱Android Studio(二):Android Studio与Gradle深入
- 《近匠》Worktile王涛:典型MEAN架构下的团队协作工具
- 2015年改变游戏产业的5大事件
- 如何反编译Android 5.0 framework
- 谷歌地图API的三大开源替代品
- 【CTO讲堂】密码泄露事件频发?探秘其背后的本质
- 关于HTC Vive,值得开发者关注的三个问题
- HTC Vive开发者峰会:破除迷思,窥探VR前沿
- MuleSoft发布Anypoint平台,基于云的异步消息传递
- 百度开发者中心首届智能语音创新大赛圆满落幕
热门标签
- Hadoop
- AWS
- 移动游戏
- Java
- Android
- iOS
- Swift
- 智能硬件
- Docker
- OpenStack
- VPN
- Spark
- ERP
- IE10
- Eclipse
- CRM
- JavaScript
- 数据库
- Ubuntu
- NFC
- WAP
下载专辑
- 数据库集合
- Android学习资料12本
- Python 和 数据分析
- andriod经典源码
- JavaScript学习资料13本
- 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈
- 网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司 提供商务支持
- 京 ICP 证 09002463 号|Copyright © 1999-2015, CSDN.NET, All Rights Reserved
- 深度解析iOS应用程序的生命周期
- 深度解析iOS应用程序的生命周期
- 深度解析iOS应用程序的生命周期
- 深度解析iOS应用程序的生命周期
- 深度解析iOS应用程序的生命周期
- 深度解析~iOS应用程序~生命周期
- ios应用程序的生命周期
- ios应用程序的生命周期
- IOS应用程序的生命周期
- iOS应用程序的生命周期
- iOS 应用程序的生命周期
- iOS应用程序的生命周期
- iOS应用程序的生命周期
- iOS应用程序的生命周期
- iOS应用程序的生命周期
- iOS应用程序的生命周期
- iOS应用程序的生命周期
- iOS 应用程序的生命周期
- easyui 源码修改,自定义弹窗
- 用HttpURLConnection即时访问网络图片的小Demo
- 深度学习
- 可编程定时/计数器 8253/8254
- socket 选项介绍
- 深度解析iOS应用程序的生命周期
- JOIN与EXISTS(子查询)的效率研究
- JavaScript表单对象Form介绍
- android inflater 用法
- mysql系列一
- spring配置durid连接池
- Java实体类的作用
- C/C++日历
- html表单提交的几种方法
已有9条评论
还可以再输入500个字