iPhone应用生命周期
?
转载自 :?http://hi.baidu.com/%D0%A1%B0%D7%D2%B2%BA%DC%B7%E7%C9%A7/blog/item/b394935dd3be9e5bfaf2c03b.html
?
整个应用程序的生命周期为:
1用户启动应用程序
2应用程序初始化
3装载主xib----|
? ? ? ? ? ? ? ? ? ??|循环处理事件
4等待事件----|
5处理事件
6退出应用
在装载完xib之后,应用的回调方法(如applicationDidFinishLaunching)被调用。在退出应用之前,applicationWillTerminate被调用。所以,可以在applicationWillTerminate方法内保存应用的当前状态,而在applicationDidFinishLaunching方法内回复应用状态。
当你在Xcode上创建一个新的应用程序时,Xcode其实已经为你准备好了基本的应用结构。你在不屑一行代码的情况下,都可以运行这个应用程序并显示一个空白窗口。也就是说,应用启动的代码和主xib都已经在于你的应用程序中了。
在other?sources下,有一个文件叫做main.m,代码如下:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]){
? NSAutoreleasePool ?*?pool = [[NSAututoreleasePool alloc] init];
? int retVal = UIApplicationMain(argc,argv,nil,nil);
? [pool release];
? return retVal;
}
这个程序类似Java/C的mian方法。当用户启动应用程序后,这个方法被调用。从上面代码看到,它调用了UIApplicationMain方法。UIApplicationMain方法创建UIApplication实例,并装载主xib。
主xib来自Info.plist文件
?
?
#File's Owner:这个对象就是UIApplocation实例。它有一个delegate的输入口属性。该属性连接到HelloWorldAppDelegate。从而,在应用启动时,系统可以调用委托类上的回调方法。在不同的环境下,File's Onwer代表的对象不同。
#FirstRespender:这个对象记录当前正在操作的对象。比如:你在文本框输入文字信息,那First Responder就是文本输入框对象。UIView和UIApplication的父类是UIResponder。
#HelloWorld App Delegate:应用的委托类。
#Window:窗口。就是应用启动后所看见到的窗口。
#HelloWorldController:控制器。
UIApplication装载了上述实例,并完成了下述动作:
#创建HelloWorldAppDelegate
#创建窗口
#创建HelloWorldController
执行委托类上的回调方法
在这之后,系统回调HelloWorldAppDelegate的applictionDidFinishLaunching(或者didFinsihLaunchngWithOptions)方法。在这个方法中,就是显示窗口。从而,用户能看到这个窗口。
#improt “HelloWorldAppDelegate.h"
@implementation HelloWroldAppDelegate
@synthesize window;
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
? ?[window makeKeyAndVisible];显示窗口
? ?return YES;
}
? 当然,在这个applicationDidFinishLaunching方法上,你还可以装载其他的对象,但不建议。用户不会等那么长时间。那么你可以先显示一个”正在装载“等图,并用一个线程来装载这些数据。
处理事件
在UIAppliaction把整个应用程序的控制权放在用户手里之前,UIApplication还要设置一个名叫run loop的事件处理队列和事件处理代码。当用户操作窗口上的对象时,系统会产生一个事件,并放到应用的事件列队上,这个事件是UIEvent类的对象。“run loop”监视器调度事件给相应的对象来处理。 事件处理完成后控制权就又回到run loop。它就是处理一个又一个 。
暂停或者结束应用程序
在结束应用之前,回调applicationWillTerminate方法
-(void)applicaionWillTerminate:(UIApplication *)application{}
在这个方法中,你可以保留应用执行状态。
有时候你需要暂停应用程序,比如,来了一个电话。如果应用程序需要特别的处理(比如暂停某个游戏),那么,你需要在下面的两个回调方法中放入代码:
-(void)applicationWillResiggActive:(UIApplication *)appliction {}
-(void)applicationDidBecomeActive:(UIApplication *)application{}
来一个电话时,系统就会调用applicationWillResignActive方法。它显示一个信息窗口。如果用户选择不接电话,那么,系统就会调用applicationDidBecomeActive方法。
?