应用程序的生命周期

应用程序的生命周期是由发生在程序启动到终止期间的一序列事件构成的。在
iPhone OS中,用户可以通过轻点Home屏幕上的图标来启动应用程序。在轻
点图标之后的不久,系统就会显示一个过渡图形,然后调用相应的main函数
来启动应用程序。从这个点之后,大量的初始化工作就会交给UIKit,由它装载
应用程序的用户界面和准备事件循环。在事件循环过程中,UIKit会将事件分发
给您的定制对象及响应应用程序发出的命令。当用户进行退出应用程序的操作
时,UIKit会通知应用程序,并开始应用程序的终止过程。
图1-1显示了一个简化了的iPhone应用程序生命周期。这个框图展示了发生在
应用程序启动到退出过程中的事件序列。在应用程序初始化和终止的时候,
UIKit会向应用程序委托对象发送特定的消息,使其知道正在发生的事件。在事
件循环中,UIKit将事件派发给应用程序的定制事件处理器。有关初始化和终止
事件的如何处理的信息,将在随后的“初始化和终止”部分进行讨论;事件处理
的过程则在“事件处理周期”部分介绍,在后面的章节也还有更为详细的讨论。

 

主函数
在iPhone的应用程序中,main函数仅在最小程度上被使用,应用程序运行所
需的大多数实际工作由UIApplicationMain函数来处理。因此,当您在
Xcode中开始一个新的应用程序工程时,每个工程模板都会提供一个main函
数的标准实现,该实现和“处理关键的应用程序任务”部分提供的实现是一样
的。main例程只做三件事:创建一个 自动释放池 ,调用
UIApplicationMain函数,以及使用自动释放池。除了少数的例外,您永
远不应该改变这个函数的实现。
程序清单1-1  iPhone应用程序的main函数 #import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

请注意:自动释放池用于内存管理,它是Cocoa的一种机制,用于延缓释放具
有一定功能的代码块中创建的对象。有关自动释放池的更多信息,请参见
Cocoa内存管理编程指南;如果需要了解与自动释放池有关的具体内存管理规
则,则请参见“恰当地分配内存”部分。
程序清单的核心代码是UIApplicationMain函数,它接收四个参数,并将
它们用于初始化应用程序。传递给该函数的缺省值并不需要修改,但是它们对
于应用程序启动的作用还是值得解释一下。除了传给main函数的argc和
argv之外,该函数还需要两个字符串参数,用于标识应用程序的首要类(即
应用程序对象所属的类)和应用程序委托类。如果首要类字符串的值为nil, 
UIKit就缺省使用UIApplication类;如果应用程序委托类为nil,UIKit就
会将应用程序主nib文件(针对通过Xcode模板创建的应用程序)中的某个对
象假定为应用程序的委托对象。如果您将这些参数设置为非nil值,则在应用
程序启动时,UIApplicationMain函数会创建一个与传入值相对应的类实
例,并将它用于既定的目的。因此,如果您的应用程序使用了
UIApplication类的定制子类(这种做法是不推荐的,但确实是可能的),
就需要在第三个参数指定该定制类的类名。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值