`
stephen830
  • 浏览: 2964509 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转载)iPhone应用生命周期

 
阅读更多

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方法。


 

  • 大小: 44.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics