`
hongtoushizi
  • 浏览: 378678 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

深度解析iOS应用程序的生命周期

    博客分类:
  • ios
阅读更多

转载自: http://www.csdn.net/article/2015-06-23/2825023

 

摘要:iOS应用程序一般都是由自己编写的代码和系统框架组成,系统框架提供一些基本infrastructure给App来运行,而开发者则自己编写代码定制App的外观和行为,了解iOS Infrastructure及其如何工作对编写App很有帮助。

iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有App来运行,而你提供自己编写的代码来定制App的外观和行为。 因此,了解iOS Infrastructure和它们如何工作对编写App是很有帮助的。

Main函数入口

所有基于C编写的App的入口都是main函数,但iOS应用程序有点不同。不同就是你不需要为iOS应用程序而自己编写main函数,当你使用Xcode创建工程的时候就已经提供了。除非一些特殊情况,否则你不应该修改Xcode提供的main函数实现。示例代码如下:

  1. #import <UIKit/UIKit.h>  
  2. #import "AppDelegate.h"  
  3.   
  4. int main(int argc, char * argv[])  
  5. {  
  6.     @autoreleasepool {  
  7.         return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));  
  8.     }   
  9. }  

上面实例代码中有一个很重要的函数UIApplicationMain,它主要是创建App的几个核心对象来处理以下过程:

  1. 从可用Storyboard文件加载用户界面;
  2. 调用AppDelegate自定义代码来做一些初始化设置;
  3. 将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应用程序有哪些关键对象以及它们职责主要是什么?

用户与iOS设备交互时产生的事件(Multitouch Events,Motion Event,Remote Control Event)交由UIApplication对象来分发给control objects(UIControl)对应的target objects来处理并且管理整个事件循环,而一些关于App运行时重要事件委托给app delegate来处理。

App delegate对象遵循UIApplicationDelegate协议,响应app运行时重要事件(app启动、app内存不足、app终止、切换到 另一个app、切回app),主要用于app在启动时初始化一些重要数据结构;例如,初始化UIWindow,设置一些属性,为window添加 rootViewController。

View Controller有一个view属性是view层次结构中的根view,你可以添加子view来构建复杂的view;controller有一些 viewDidLoad、viewWillAppear等方法来管理view的生命周期;由于它继承UIResponder,所有还会响应和处理用户事 件。

data model对象主要用来存储数据。例如,饿了么app在搜索切换地址后,有历史记录搜索地址历史,当app下次启动时,读取和显示搜索地址历史。

document对象(继承UIDocument)用来管理一些或所有的data model对象。document对象并不是必须的,但提供一种方便的方式来分组属于单个文件或多个文件的数据。

UIWindow对象位于view层次结构中的最顶层,它充当一个基本容器而不显示内容,如果想显示内容,添加一个content view到window。

它也是继承UIResponder,所以它也是会响应和处理用户事件。

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

 
分享到:
评论

相关推荐

    IOS应用源码——TableFlipDemo.rar

    《iOS应用源码——TableFlipDemo深度解析》 在iOS应用开发中,Table Flip效果是一种常见且引人注目的交互设计,它使得用户能够通过手指的翻转动作,直观地在两个视图之间切换,为应用程序增添了趣味性和动态感。...

    IOS应用源码——ParticleDemo.zip

    《iOS应用源码解析——ParticleDemo深度探索》 在iOS应用开发中,源码学习是提升技术能力的重要途径。今天我们将深入探讨一个名为"ParticleDemo"的iOS应用源码,通过对这个项目的剖析,来理解iOS应用的核心机制以及...

    IOS应用源码之AISTestDemo.zip

    《iOS应用源码解析:AISTestDemo深度剖析》 在iOS开发领域,源码学习是提升技术能力的重要途径。本篇文章将深入探讨名为"AISTestDemo"的iOS应用源码,通过分析其结构、功能及实现机制,帮助开发者更好地理解和运用...

    IOS应用源码——ToyClock.rar

    《iOS应用源码——ToyClock深度解析》 iOS应用源码——ToyClock,这是一个专为iOS平台设计的源代码项目,旨在帮助开发者深入理解iOS应用的开发流程、编程技巧以及苹果的开发环境Xcode的使用。通过分析这个项目,...

    IOS应用源码之antekpiechnik-touch-qwerty-a4f737b.zip

    通过对"antekpiechnik-touch-qwerty-a4f737b.zip"中的源码进行深度解析,开发者不仅可以理解iOS键盘开发的底层机制,还能学习到Antek Piechnik的编程思路和最佳实践,这对于提升iOS应用的用户体验和功能实现有着重要...

    IOS应用源码——通过OpenGL加载图像 DrawPixels.rar

    这个压缩包文件“IOS应用源码——通过OpenGL加载图像 DrawPixels.rar”包含了开发iOS应用程序时使用OpenGL ES加载图像的相关源代码。OpenGL ES是OpenGL的一个轻量级版本,主要用于嵌入式系统,包括移动设备如iOS设备...

    IOS应用源码——通过OpenGL加载图像 DrawPixels.zip

    - `DrawPixelsAppDelegate.h` 和 `DrawPixelsAppDelegate.m`:这是应用程序的委托类,处理应用生命周期中的事件,如启动、暂停、恢复等。 - `main.m`:这是程序的入口点,负责启动应用程序。 - `DrawPixels_...

    Developing iOS 7 Apps for iPhone and iPad ppt (1-10)

    斯坦福大学的"Developing iOS 7 Apps for iPhone and iPad"课程是学习如何构建iOS应用程序的宝贵资源,尤其适合初学者和有经验的开发者。这门课程采用最新的Xcode 5作为开发环境,针对苹果公司的操作系统iOS 7进行...

    ios学习路线iOS学习路线

    在iOS学习之旅中,开发者需要掌握一系列技术和工具,才能创建出色的应用程序。以下是一条详细的iOS...通过逐步学习和实践,你将能够构建出令人印象深刻的iOS应用程序。记住,不断学习和适应新技术是这个行业的关键。

    IOS源码应用Demo-ABC123:一个挑战记忆力的游戏 ABC123.zip

    《ABC123:iOS源码应用Demo的深度解析》 在移动开发领域,iOS平台以其卓越的用户体验和丰富的功能特性吸引着众多开发者。本文将深入探讨一款名为"ABC123"的iOS源码应用Demo,这是一款旨在挑战用户记忆力的游戏。这...

    ArcGIS API for iOS进阶教程课件

    - **内存管理**:iOS应用需手动管理对象生命周期,使用alloc/new/copy分配内存,dealloc释放内存,通过引用计数机制避免内存泄漏。 #### ArcGIS API for iOS开发实践 ArcGIS API for iOS的强大之处在于其实现了地图...

    iPhone与iPad开发实战——精通iOS开发2.rar

    接下来,你需要掌握Cocoa Touch,这是iOS应用程序的基础框架,提供了UI设计和事件处理的基本工具。通过学习Storyboards和Auto Layout,你可以构建适应各种屏幕尺寸和方向的用户界面。同时,还要了解UIViewController...

    Programming iOS 8 Dive Deep into Views, View Controllers, and Frameworks

    2. 视图控制器(View Controllers):视图控制器管理视图的生命周期、状态和行为,是iOS应用程序架构的关键组成部分。书中会探讨UIViewController的使用,包括加载视图、处理用户事件、导航控制器...

    IOS系统资源类

    在iOS开发中,"BUNDLEID"(Bundle Identifier)是一个非常关键的概念,它是一个独一无二的字符串,用于识别iOS应用程序的身份。这个字符串通常遵循反向DNS(Domain Name System)格式,例如"com.example.myApp",它...

    Delphi_深度编程及其项目应用开发,Delphi_深度编程及其项目应用开发

    这涵盖了软件工程的整个生命周期,旨在培养读者的系统设计和项目管理能力。此外,还会讲解如何使用Delphi进行跨平台开发,利用FireMonkey框架创建iOS和Android应用,实现真正的多平台部署。 本书还将涉及一些高级...

    lkd-helper-iOS:USTL的校园应用程序

    在应用的实现过程中,开发者可能使用了苹果的UIKit框架,这是iOS应用开发的核心框架,提供了创建用户界面、处理事件、管理应用程序生命周期等所有必要的工具。通过Storyboard和XIB文件,开发者可以可视化地设计界面...

    iOS游戏应用源代码——unindented-copong-iphone-ae6a6c9.zip

    5. `main.m`或`AppDelegate.swift`:应用的入口点,负责启动和管理应用生命周期。 二、编程语言与框架 1. Objective-C/Swift:iOS游戏通常使用这两种语言之一编写,Objective-C是早期iOS开发的主流,而Swift则是...

    ios-MBProgressHUD-Extension.zip

    《iOS开发:MBProgressHUD扩展的深度解析与应用》 在iOS应用开发中,用户界面的响应性和体验至关重要。当应用程序执行耗时操作时,如网络请求、数据加载等,为了提供良好的用户体验,通常需要显示进度指示器,让...

Global site tag (gtag.js) - Google Analytics