ios的生命周期
来源:互联网 发布:电脑麦克风软件 编辑:程序博客网 时间:2024/05/01 00:14
@interface TestUIApplicationAppDele
而应用程序的UIApplication则被定义在MainWindow.xib文件中,并且有一个作为outlet的UIApplicationDelegate引用。
现在来看协议中定义的这些需要实现的方法分别是什么作用:
1、- (void)applicationWillResignAct
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
2、- (void)applicationDidBecomeActi
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
3、- (void)applicationDidEnterBackg
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
4、- (void)applicationWillEnterFore
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
5、- (void)applicationWillTerminate
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSusp
6、- (void)applicationDidReceiveMem
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
7、-(void)applicationSignificantTi
说明:当系统时间发生改变时执行
8、-(void)applicationDidFinishLaun
说明:当程序载入后执行
9、- (void)application:(UIApplication)applicationwillChangeStatusBarFrame
说明:当StatusBar框将要变化时执行
10、- (void)application:(UIApplication*)applicationwillChangeStatusBarOrien
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
说明:当StatusBar框方向将要变化时执行
11、- (BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url
说明:当通过url执行
12、- (void)application:(UIApplication*)applicationdidChangeStatusBarOrient
说明:当StatusBar框方向变化完成后执行
13、- (void)application:(UIApplication*)applicationdidChangeSetStatusBarFra
说明:当StatusBar框变化完成后执行
从“HelloWorld”看iOS应用的生命周期
在这之前我们先来看看Objective-C语言的关于这段协议代码:
- @protocol
SimpleProtocol - -(void)doSomething:(NSString
*)str; - @end
- @interface
SimpleClass:NSObject< SimpleProtocol >{ - }
- @end
- @implementation
SimpleClass - -(void)
doSomething:(NSString *)str{ -
NSLog(str); - }
- @end
- int
main(int argc, char *argv[]) { -
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; -
int retVal = UIApplicationMain(argc, argv, nil, nil); -
[pool release]; -
return retVal; - }
完成上面的清理工作后,接下来开着我们的编写,首先新建程序入口main.m文件已经main方法,程序从这里开始!代码如下:
- int
main(int argc, char *argv[]) { -
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; -
int retVal = UIApplicationMain(argc, argv, nil, @”SampleDelegate”); -
[pool release]; -
return retVal; - }
NSAutoreleasePool内存自动释放池这个干什么我就不说了,你懂得的。这里主要看一下第二行UI ApplicationMain(argc, argv, nil, nil);与模板生成的相比改成UI Application Main(argc,argv, nil, @”SampleDelegate”);这样做我们为UIApplication对象设置了名为SampleDelegate代理类,上面不是说了UIApplication是不处理具体事情的,真正做事的是UIApplication代理类,这个名为SampleDelegate代理类就是我们需要具体写代码实现的,当UIApplication初始化后就开始监听事件,根据不同的监听事件让SampleDelegate代理类做不同的处理,比如显示第一个显示界面。
新建名为SampleDelegate.m的类,在SampleDelegate.h输入如下代码:
- @interface
SampleDelegate : NSObject { - }
- @end
- @implementation
SampleDelegate - -
(void)applicationWillResignAct ive:(UIApplication *)application{} - -
(void)applicationDidBecomeActi ve:(UIApplication *)application{} - -
(void)applicationDidEnterBackg round:(UIApplication *)application{} - -
(void)applicationWillEnterFore ground:(UIApplication *)application{} - -
(void)applicationWillTerminate :(UIApplication *)application{} - -
(void)applicationDidReceiveMem oryWarning:(UIApplication *)application{} - -
(void)applicationSignificantTi meChange:(UIApplication*)application{} - -
(void)applicationDidFinishLaun ching:(UIApplication*)application{} - -
(void)application:(UIApplication*)application willChangeStatusBarFrame :(CGRect)newStatusBarFrame{} - -
(void)application:(UIApplication*)application willChangeStatusBarOrien tation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration{} - -
(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{ -
return YES; - }
- -
(void)application:(UIApplication*)application didChangeStatusBarOrient ation:(UIInterfaceOrientation)oldStatusBarOrientation{} - -
(void)application:(UIApplication*)application didChangeSetStatusBarFra me:(CGRect)oldStatusBarFrame{} - @end
现在来看协议中定义的这些需要实现的方法分别是什么作用:
◆-(void)applicationWillResignAct
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
◆-(void)applicationDidBecomeActi
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
◆-(void)applicationDidEnterBackg
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
◆-(void)applicationWillEnterFore
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
◆-(void)applicationWillTerminate
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSusp
◆-(void)applicationDidReceiveMem
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
◆-(void)applicationSignificantTi
说明:当系统时间发生改变时执行
◆-(void)applicationDidFinishLaun
说明:当程序载入后执行
◆-(void)application:(UIApplication)applicationwillChangeStatusBarFrame
说明:当StatusBar框将要变化时执行
◆-(void)application:(UIApplication*)applicationwillChangeStatusBarOrien
- (UIInterfaceOrientation)newStatusBarOrientation
- duration:(NSTimeInterval)duration
说明:当StatusBar框方向将要变化时执行
◆-(BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url
说明:当通过url执行
◆-(void)application:(UIApplication*)applicationdidChangeStatusBarOrient
说明:当StatusBar框方向变化完成后执行
◆-(void)application:(UIApplication*)applicationdidChangeSetStatusBarFra
说明:当StatusBar框变化完成后执行
下图是我总结的一个大概流程图,不是很准确但是基本上也说明了整个过程,仅供参考。
到这为止我们的这个程序运行起来还是什么都没有看到,确实我们也没有写具体的功能代码,接下来我们要做的就是在屏幕上显示“HelloWorld!”,首先知道一下要在屏幕上显示,首先需要一个UIWindow对象,这个你可以认为是一个电视机,然后还需要往这个UIWindow对象里添加UIView对象,UIView相当于电视上一幕一幕的画面。通过上面的流程知道要在程序后显示可以在applicationDidFinishLaun
- -
(void)applicationDidFinishLaun ching:(UIApplication*)application{ -
UIWindow *window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; -
SampleViewController *viewctrl=[[SampleViewController alloc]init]; -
[window addSubview:viewctrl.view]; -
[window makeKeyAndVisible]; - }
上面的代码中做了如下几件事情:
◆实例化了一个UIWindow对象
◆实例化了SampleViewController对象
◆把SampleViewController对象UIView对象添加到UIWindow对象中
◆显示UIWindow对象
看这段代码我们并没有直接实例化一个UIView对象然后添加给UIWindow对象而且通过SampleViewController对象,它是UIViewController子类负责视图的显示控制,非常的好用,在这里我们只是实现了loadView就够了,我们只要简单的显示一下“Hello World!”文字, 具体代码如下:
- @interface
SampleViewController : UIViewController {} - @end
- @implementation
SampleViewController - -(void)loadView{
-
UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; -
contentView.backgroundColor = [UIColor blackColor]; -
self.view = contentView; -
[contentView release]; -
CGRect labelFrame = CGRectMake(40.0f, 200.0f, 240.0f, 60.0f); -
UILabel *frontLabel = [[UILabel alloc] initWithFrame:labelFrame]; -
frontLabel.text = @"Hello World!"; -
frontLabel.font = [UIFont fontWithName:@"Georgia" size:24.0f]; -
frontLabel.textColor = [UIColor colorWithRed:0.82f green:1.0f blue:0.286f alpha:1.0f]; -
frontLabel.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f]; -
[contentView addSubview:frontLabel]; -
[frontLabel release]; - }
- @end
到这里我们已经完成的HelloWorld程序的编写,点击运行就能看到如下的效果图:
- ios应用的生命周期
- ios应用程序的生命周期
- iOS: App的生命周期
- ios应用的生命周期
- IOS-UIViewController的生命周期
- ios应用的生命周期
- ios的生命周期
- ios UIViewController的生命周期
- ios应用程序的生命周期
- IOS-UIViewController的生命周期
- IOS:UIViewController的生命周期
- ios--ViewController的生命周期
- 【iOS】UIViewController的生命周期
- ios ViewController的生命周期
- IOS-UIViewController的生命周期
- iOS程序的生命周期
- IOS应用程序的生命周期
- iOS应用程序的生命周期
- android定制(全)
- javascript_use strict
- android 生命周期
- Android应用程序的生命周期
- 深入浅出 iOS 之生命周期
- ios的生命周期
- makefile
- Comparison of Architec…
- Java_全面总结Java泛型
- Java_泛型的理解与等价实现
- HDU 1179 Ollivanders: Makers of Fine Wands since 382 BC. 最大匹配
- Java_List对象排序通用方法
- Java_int 和integer的区别
- Java_Object的使用