欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

深入iPhone开发:应用程序核心探秘(1)

来源: 开发者 投稿于  被查看 18490 次 评论:207

深入iPhone开发:应用程序核心探秘(1)


每个iPhone应用程序都基于UIKit框架而构建,因此拥有同样的核心架构。UIKit提供运行应用程序的关键对象并且协调用户输入处理和屏幕内容显示。应用程序彼此之间区分开来的地方在于如何配置这些缺省对象和它们如何把自定义对象整合到它们的应用程序用户界面和行为中。

51CTO推荐专题:iPhone应用程序开发初探

尽管定制你的应用程序用户界面和基本行为发生在你的自定义代码中,仍然有很多定制必须使用在应用程序的最高层。因为这些应用层的定制影响了你的应用程序和系统以及其它安装程序之间的交互方式,理解什么时候该采取行动而什么时候默认行为已经足够这一点很重要。本文提供了一个核心应用程序架构和高级别定制点方面的总体描述来帮助你做出决定。

核心应用程序架构

从你的程序被用户启动,到它退出,UIKit框架管理着大多数应用程序关键基础结构。一个iPhone应用程序不断从系统中接收事件并必须响应这些事件。接收事件是UIApplication 对象的工作但是响应这些事件是你自定义代码的责任。为了理解你在哪些地方需要响应事件,其实,这对理解一点整个应用程序生命周期和事件循环也有帮助。下面的章节描述了这些周期并且还提供了一些贯穿iPhone应用程序开发的核心设计模式的总结。相关推荐:专访最牛iPhone开发团队:走进移动开发

应用程序生命周期

应用程序生命周期构成发生在你的应用程序启动和退出期间的事件序列。在iPhone 操作系统中, 用户通过点击桌面上的菜单启动你的应用程序。在点击发生之后的短时间内,系统显示一些过渡图片并开始通过调用main函数启动你的应用程序。从这一点开始,一大堆的初始化工作被移交给UIKit,它将加载应用程序的用户界面并准备好它的事件循环。在事件循环期间,UIKit 协调你自定义对象的事件交付和应用程序发出命令的响应。当用户执行一个动作会让你的应用程序退出时,UIKit通知你的应用程序并开始这个结束过程。

图1-1 描绘了一个iPhone应用程序的简单生命周期。这个图显示了应用程序启动到退出期间发生的事件序列。在初始化和结束阶段,UIKit发送特定的消息给应用程序代理对象以便其知道发生了什么。在事件循环阶段,UIKit分发事件给你的应用程序自定义事件处理器。处理初始化和结束事件在“Initialization and Termination,” 中描述,而事件处理过程在“The Event-Handling Cycle” 中介绍,在后面的章节将覆盖更多的细节。

图1-1  应用程序生命周期 
图 1-1  应用程序生命周期

Main函数

在iPhone应用程序里, main函数功能被最小化了。大部分实际工作是在UIApplicationMain 函数中完成的。 当你在Xcode中开始一个新的应用程序项目时,每个项目模版都提供了一个标准main函数实现如同在 “Handling Critical Application Tasks.”里的那个。Main函数只做了三件事: 创建了一个自释放池autorelease pool),调用UIApplicationMain,然后释放autorelease pool。 除了很少的特例,你不应该修改它。

  1. iPhone应用程序的main函数  
  2. #import <UIKit/UIKit.h> 
  3.  
  4. int main(int argc, char *argv[])  
  5.    
  6. {  
  7.    
  8.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  9.    
  10.     int retVal = UIApplicationMain(argc, argv, nil, nil);  
  11.    
  12.     [pool release];  
  13.    
  14.     return retVal;  
  15.    

注意: 自释放池用在内存管理中。它是一个Cocoa机制用来延迟在一个函数体内创建的对象的释放。更多信息参见Memory Management Programming Guide for Cocoa。对于和自释放池相关的iPhone应用程序特定的内存管理指南,参见“Allocating Memory Wisely.”

上述列表中的中心部分UIApplicationMain函数采用了4个参数并使用它们来初始化应用程序。尽管你没必要更改传入参数的默认值,还是值得解释一下它们起动应用程序时的用途。除了argc 和 argv 参数外,这个函数采用两个字符串参数来识别基本类也就是,应用程序对象类)和应用程序代理类。如果这个基本类字符串为空,UIKit使用UIApplication类作为缺省值。

如果应用程序代理类为空,UIKit假设它为从你的应用程序主nib文件加载的对象其中之一对于使用Xcode模版创建的应用程序)。 设置这些参数任意一个为非空数值将导致UIApplicationMain 函数在应用程序启动时创建一个相应类实例并为声明的目的使用它。这样,如果你的应用程序使用一个自定义的UIApplication子类不推荐这样,但是当然是可能的),你将在第三个参数中指定你自定义类的名字。


用户评论