iPhone的软件栈有好几层组成,而应用程序是位于栈里面最高的抽象层,系统核心服务(操作系统层)则是位于最底层的。这中间还有媒体层、Cocoa Touch层、核心服务层等等 ,但一般在开发应用程序的过程中,与我们主要打交道的是GUI框架和Cocoa Touch层所提供的面向对象抽象。Cocoa的Foundation框架包含了基础数据类、基础工具类等主要部分,几乎所有的Cocoa类都是从一个根类对象NSObject继承来的。本次主要说明应用程序层的事件委托与应用程序生命周期。
为了说明应用程序,从main开始。
int main(int argc,char *argv[]}{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc,argv,nil,nil);
[pool release];
return retVal;
}
这是一个典型的C风格主函数,其功能核心部分在于调用了UIApplicationMain函数来启动事件循环并开始运行应用程序,注意主函数的第三个以及第四个参数,这两个参数指明了应用程序的主类和应用程序委托。而这个委托就是一个处理应用程序生命周期管理事件的类。如果指定是nil,则被告知需要从一个nib文件来装入这些类对象。在Info.plist文件中,指定了一个nib文件,默认情况下是MainWindow.xib,接下来的事情就是 UIkit在xib文件中寻找应用的委托了。
在该nib文件(用IB打开)中,可以看到有几个图标,其中有一个图标是应用程序委托的图标。其它的好像是视图控制器图标以及一个窗口图标。另外有File's Owner (拥有当前nib文件的对象)以及First Responser(指示该组件能够第一个接收用户的输入)两个图标。
那么应用程序是如何将该委托对象与应用程序相连的呢?
iPhone应用程序都有一个窗口对象,应用程序委托中有两个连接,一个连接到该nib文件的窗口对象,一个连接到该nib文件的视图控制器上。一般我们可以通过定制视图控制器的行为来控制我们的显示。
整个过程就是这样的了。系统先调用main函数,然后main函数调用UIAplicationMain函数,这个函数利用Info.plist文件来寻找应用程序的主nib文件,在该文件中找到应用程序的一个委托,这个委托又有两个连接,可以接连到一个窗口和视图控制器。然后这个视图控制器又可以定制我们的显示行为(可以用代码定制也可以用nib文件定制),这就是启动应用程序的整个过程。
接下来,委托可以做什么呢?
应用程序的生命周期由生命周期方法控制,这些生命周期方法与应用委托相关的,当然,也是与由它装入的视图控制器相关的。比如,应用程序刚刚启动完毕,调用委托的applicationDidFinishLaunching:方法。
为什么需要委托呢?
一个简单的想法是,一个对象能够有一个单一的委托对象,可以在某些事件发生的时候来调用该委托对象的事件方法。委托对象就像一个职业能手一样,它总是说:没事,当这个事件发生的时候,你告诉我就好了。而另一个接收事件的对象则有很多其它的业务事情需要处理:我实在没时间处理这些事情,我也不知道我应该要做什么,所以我交给你吧。
委托对象由UIApplicationDelegate所定义,因此对于一个类,如果想成为应用程序的委托,一定需要在头文件中声明它实现这个协议,然后在类的实现中,实现所有的必须方法。
分享到:
相关推荐
### iPhone应用程序编程指南知识点概述 #### 一、引言与背景 - **文档名称与目的**:“iPhone应用程序编程指南(中文版)”旨在为开发者提供一套全面的指南,帮助他们理解和掌握构建iPhone本地应用程序所需的技能与...
### iPhone应用程序编程指南知识点概述 #### 一、iPhone SDK与本地应用程序 - **核心要点**:iPhone SDK提供了必要的工具和资源,用于创建运行在iPhone本地的应用程序,与Web应用程序不同,本地应用程序作为独立的...
### iPhone应用程序编程指南知识点概述 #### 一、iPhone SDK与本地应用程序 - **定义与区别**:iPhone SDK(Software Development Kit)为开发者提供了构建iPhone本地应用程序所需的工具和资源。与运行于Safari内...
"iPhone 应用程序开发基础知识" 本章将介绍如何创建一个简单的 iPhone 应用程序,介绍基础的技术,不要求读者现在就掌握这些技术,但这些技术将有助于读者对基础开发过程有初步了解,窥视一下开发 iPhone 程序的...
- `nil`: 表示应用程序委托类,默认为Xcode项目模板中的默认委托类。 - 如果需要自定义UIApplication或其委托类,可以在`UIApplicationMain`函数中指定相应的类名,从而实现更复杂的初始化逻辑。 **2.3 内存管理...
《iPhone开发入门》这篇文档主要介绍了如何开始开发iPhone应用程序,特别是针对初学者,强调了Objective-C基础知识的重要性,并以MoveMe样本代码为例进行讲解。本文档分为几个关键部分,包括初始化应用程序、创建...
iPhone应用开发从入门到精通作者:杨帆 郑青青 王凤筱 编著前 言入 门 篇第1章 iPhone OS介绍 21.1 iPhone OS预览21.1.1 iPhone OS的发展历史21.1.2 iPhone OS的外观31.1.3 多任务特性31.1.4 不支持的技术...
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示:int argc,char * argv [],NSString * principalClassName,NSString * delegateClassName);那么UIApplicationMain...
本文将为您提供关于Xcode中文教程的知识点总结,涵盖了iPhone应用程序开发的基础技术、设计模式、工具和Interface Builder的使用。 基础技术 在开始iPhone应用程序开发之前,您需要了解计算机编程基础,尤其是...
### iPhone应用程序中的委托模式与生命周期管理 #### 一、引言 在iOS开发中,理解和掌握委托模式(Delegate Pattern)及应用的生命周期管理是至关重要的。通过本篇文档,我们将深入探讨`UIApplicationDelegate`协议...
苹果公司为了帮助广大开发者更好地理解和掌握iPhone应用程序的开发流程和技术细节,特别推出了《iPhone开发指南》。本指南不仅适合初次接触iPhone应用开发的新手,也为经验丰富的开发者提供了宝贵的参考资料。 ####...