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应用开发从入门到精通作者:杨帆 郑青青 王凤筱 编著前 言入 门 篇第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...
1.4 编写iPhone应用程序有何不同 4 1.4.1 只有一个正在运行的应用程序 4 1.4.2 只有一个窗口 4 1.4.3 受限访问 5 1.4.4 有限的响应时间 5 1.4.5 有限的屏幕大小 5 1.4.6 有限的系统资源 5 1.4.7 不支持垃圾收集 6 ...
5.创建第一款iPhone应用程序 6.操作和输出口 7.委托(Delegetas) 8.UI元素 9.加速度传感器(accelerometer) 14.SQLite数据库 15.发送电子邮件 16.音频和视频 17.文件处理 18.地图开发 19.应用内购买(App支付功能) 20...
1.4 编写iPhone应用程序有何不同 1.4.1 只有一个正在运行的应用程序 1.4.2 只有一个窗口 1.4.3 受限访问 1.4.4 有限的响应时间 1.4.5 有限的屏幕大小 1.4.6 有限的系统资源 1.4.7 缺少Cocoa工具 ...
OK 该应用程序使用一个类作为过渡委托并拦截UINavigationController一个视图控制器和另一个视图控制器之间的默认推送过渡动画。 然后它在这两个视图控制器之间注入自己的自定义动画,剩下的交给 iOS。 它是如何工作...
iPhone开发基础教程 相配套源码。... 3.4 使用应用程序委托 3.5 编辑MainWindow.xib 3.6 编辑Button_FunViewController.xib 3.6.1 在InterfaceBuilder中创建视图 3.6.2 连接所有元素 3.6.3 测试
每个iPhone应用程序都有一个UIApplication,UIApplication是iPhone应用程序的开始并且负责初始化并显示UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中。
1.3 iPhone 应用程序组件.....3 1.3.1 应用程序文件夹层次结构.....3 1.3.2 可执行文件.....3 1.3.3 Info.plist 文件.....4 1.3.4 图标和默认图像.....5 1.3.5 XIB(NIB)文件.....5 1.3.6 应用程序束中不存在的文件...
1.3 iPhone 应用程序组件.....3 1.3.1 应用程序文件夹层次结构.....3 1.3.2 可执行文件.....3 1.3.3 Info.plist 文件.....4 1.3.4 图标和默认图像.....5 1.3.5 XIB(NIB)文件.....5 1.3.6 应用程序束中不存在的文件...
1.3 iPhone 应用程序组件.....3 1.3.1 应用程序文件夹层次结构.....3 1.3.2 可执行文件.....3 1.3.3 Info.plist 文件.....4 1.3.4 图标和默认图像.....5 1.3.5 XIB(NIB)文件.....5 1.3.6 应用程序束中不存在的文件...
1.3 iphone应用程序组件 3 1.3.1 应用程序文件夹层次结构 3 1.3.2 可执行文件 3 1.3.3 info.plist文件 4 1.3.4 图标和默认图像 5 1.3.5 xib(nib)文件 5 1.3.6 应用程序束中不存在的文件 5 1.3.7 沙盒 6 ...
11.2.2 理解应用程序委托150 11.2.3 编写“hello, world!”151 11.3 在xcode中新建类154 11.3.1 新类简介154 11.3.2 头文件154 11.3.3 源代码文件155 11.3.4 链接156 11.4 xcode的其他功能157 11.4.1...
只需将以下几行添加到您的应用程序委托中: import Cribble override func motionBegan ( _ motion : UIEventSubtype, with event : UIEvent ? ) { guard motion == . motionShake else { return } Cribble. ...
介绍Little Go是一个免费的开源iOS应用程序,可让您在iPhone或iPad上玩Go游戏。 您可以与另一个人(在同一设备上)或计算机对战。 计算机播放器由开源软件库。 运行最新版本的Little Go的最低要求是iOS 9.0。 有关...
FTLinearActivityIndicator 有缺口的iPhone不显示网络活动指示灯。 通过在以下设备的常规状态栏项顶部的...在应用程序委托的didFinishLaunching方法,初始化窗口之后,只需调用 UIApplication.configureLinearNetw
如果使用情节提要,则集成Fingertips的最简单方法是覆盖应用程序委托的window方法,如下所示: // AppDelegate.m - (UIWindow *)window { if (!_window) { _window = [[MBFingerTipWindow alloc ] ...
在 didFinishLaunchingWithOptions 内的应用程序委托中使用 startSession 方法初始化库: - ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions { ...