您的位置:首页 > 移动开发

UIApplication的生命周期

2015-11-22 14:51 281 查看
1.创建uiAppliction

 UIApplication对象介绍:

            
1>
一个UIApplication代表是一个应用程序,而且是单例的。

                  **
用来封装整个应用程序的一个对象,
比如当应用程序执行到某个时期要做什么,
生命周期等。

                          

            
2>
获取UIApplication对象:
[UIApplication sharedApplication];(单例的)

[b]2.[b]当一个iOS程序启动后,首先创建的第一个对象就是UIApplication[/b][/b]对象

3.利用UIApplication可以做一些应用界别的操作

 4>
利用UIApplication可以做一些应用级别的操作。

                 *
应用级别操作:

                    
1> QQ有消息的时候右上角的消息条数。

                      

                      
//
获取UIApplication对象。

                       UIApplication *app = [UIApplication sharedApplication];

                      

                      
//
设置右上角,

有10条消息

                       app.applicationIconBadgeNumber =
10;

                       

                      
//
取消显示消息

                       app.applicationIconBadgeNumber =
0;

4.联网操作是,状态栏上的等待图片的指示器

 2>
联网操作时,状态栏上的等待图标指示器。waiting图标。

                        UIApplication *app = [UIApplication sharedApplication];

                        app.networkActivityIndicatorVisible =
YES;

5.利用UIApplication打开某个资源网站

3>
利用UIApplication打开某个资源:

                         **
系统会自动根据协议识别使用某个app打开。

                           UIApplication *app = [UIApplication sharedApplication];

                           **
打开一个网页:

                           [app openURL:[NSURL URLWithString:@"http://ios.icast.cn"]];

                        

                           **
打电话

                           [app openURL:[NSURL URLWithString:@"tel://10086"]];

                          

                           **
发短信

                           [app openURL:[NSURL URLWithString:@"sms://10086"]];

                          

                           **
发邮件

                           [app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];

                          

                          

                         **
使用openURL方法也可以打开其他应用,在不同应用之间互相调用对方。

                           **
美图秀秀,
点击分享到"新浪微博",
打开"新浪微博"选择账号,
跳转回"美图秀秀",
开始分享

                           **
喜马拉雅,
使用微博、QQ
账号
登录。都需要应用程序间跳转。

                          

7.UIApplicationMain函数介绍.

 

      
6. UIApplicationMain函数介绍。

      
/**

       
方法名:

       

参数介绍:

        argc:使用main函数的argc即可

        argv:使用main函数的argv即可

        principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类),如果为nil,则用UIApplication类作为默认值

        delegateClassName:指定应用程序的代理类,UIApplicationDelegate协议中定义的方法,在该类中实现.

       

       

        UIApplicationMain函数会:

        1>
根据principalClassName创建UIApplication对象

        2>
根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性

       

       

       
程序正常退出时UIApplicationMain函数才返回

       

       
默认调用方式:

        UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

           
等价于

        UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");

       

        **
代理参数必须传递,

如果传nil,

则显示"黑屏"。

       

        */

10.IOS程序启动过程 

            

1>
打开程序。

                          

            
2>
调用main函数。

                          

            
3>
在main函数中调用: 
UIApplicationMain()函数。

                *
在UIApplicationMain()函数中:

                   
1.
创建UIApplication对象

                          

                   
2.
创建AppDelegate代理对象

                          

                   
3.
将AppDelegate代理对象设置给UIApplication对象。

                          

                   
4.
在UIApplicationMain()函数开启一个"死循环(事件循环)",
所以程序不会退出,
我们可以任意使用。在这个"死循环(事件循环)"中程序不断监听用户的各种事件,
依次处理(依靠"事件队列"实现)。

                          

                   
5.
程序启动完毕:
触发application:didFinishLaunchingWithOptions事件。

                          

                   

                  
在此方法中创建了application对象和它的代理对象,并设置了application的代理对象,开启消息循环。在消息循环中不断监测
消息队列
中是否有新的事件(队列是先进先出)(事件队列的目的是为了提高性能)
(消息循环可以简单理解为一个死循环,当系统有事件被触发,事件所执行的方法会放入消息队列中,消息循环的作用就是不停的去消息
队列中看有没有新的消息,有就执行,用户感觉不到等待的时间)

                  
//先检查info.plist文件中是否有principalClassName键,如果没有的话UIApplicationMain中的principalClassName参

数,会默认被指定为UIApplication
,代理类的会被初始化

            
4>
程序退出。

9.UIWindow对象

  1.简介

8.
UIWindow对象。

              ** UIWindow是一种特殊的UIView, UIWindow也是继承自UIView。

                          

              **
通常一个app只会有一个UIWindow对象。

                          

              ** iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了

             

              **
一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow

                          

              **
在文档中找: Cocoa Touch Layer -> UIKit -> Guides -> View Controller Programming Guide

for iOS -> View Controller Basics ->
关于UIWindow与控制器View的关系图片。

                          

              **
创建过程UIWindow -> UIViewController -> UIView ->
把UIView加到UIWindow对象中。

1.显示 UIWindow

  

8.
显示UIWindow([self.window
makeKeyAndVisible])。

2.创建window并显示出来

- (BOOL)application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {

   
//实例化一个window的大小

   
self.window
= [[UIWindow

alloc]initWithFrame:[UIScreen

mainScreen].bounds];

   
self.window.backgroundColor
= [UIColor

greenColor];

   
//创建一个UIViewcontroller处理器

   
UIViewController
*rem = [[UIViewController

alloc]init];

   

    rem.view.backgroundColor
= [UIColor

grayColor];

   
//添加控制器到window上

   
self.window.rootViewController
= rem;;

   

   
//让window显示出来

    [self.window

makeKeyAndVisible];

   

   

   

   
return
YES;

}

3. 总结

UIwindow就一个作用"显示界面” 将来是通过切换不同的控制器View分别显示UIWindow上

4.没有SB文件的原理

 1.
调用main函数。

                          

                    
2.
调用UIApplicationMain函数。

                          

                    
3.
创建UIApplication对象

AppDelegate对象

                          

                    
4.
设置UIApplicatio对象的代理是AppDelegate对象。

                   

                    
5. AppDelegate对象开始监听"系统事件(应用程序的事件)",进入"事件循环"。

                          

                    
6.
程序启动完毕后调用
application: didFinishLaunchingWithOptions:方法。

                          

                    
7.
在application: didFinishLaunchingWithOptions:方法中手动创建:

                          

                       * UIWindow

                      

                       *
控制器

                      

                       *
设置UIWindow的根控制器是刚才创建的控制器

                      

                       *
显示UIWindow
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: