UI进阶之程序启动原理及UIApplication

UIApplication对象介绍:
             1> 一个UIApplication代表是一个应用程序,而且是单例的。
                  ** 用来封装整个应用程序的一个对象, 比如当应用程序执行到某个时期要做什么, 生命周期等。

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

                 /** 验证单例模式, 参考代码:

                  - (void)viewDidLoad {
                      [super viewDidLoad];

                      UIApplication *app1 = [UIApplication sharedApplication];

                      UIApplication *app2 = [UIApplication sharedApplication];

                      NSLog(@"%p----%p",app1, app2);
                  }

                  */

             3> 当一个iOS程序启动后,首先创建的第一个对象就是UIApplication对象。

             4> 利用UIApplication可以做一些应用级别的操作。
                 * 应用级别操作:
                     1> QQ有消息的时候右上角的消息条数。

                       // 获取UIApplication对象。
                       UIApplication *app = [UIApplication sharedApplication];

                       // 设置右上角, 有10条消息
                       app.applicationIconBadgeNumber = 10;

                       // 取消显示消息
                       app.applicationIconBadgeNumber = 0;
                        /** 参考代码:
                         // 当点击按钮时, 设置右上角消息
                         - (IBAction)click:(id)sender {

                             // 获取UIApplication对象
                             UIApplication *app = [UIApplication sharedApplication];

                             // iOS 8 系统要求设置通知的时候必须经过用户许可。
                             UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];

                             [app registerUserNotificationSettings:settings];

                             app.applicationIconBadgeNumber = 10; // 有10条消息

                         //  app.applicationIconBadgeNumber = app.applicationIconBadgeNumber > 0 ? 0 : 10; // 有10条消息
                         }

                         */

                     2> 联网操作时,状态栏上的等待图标指示器。waiting图标。
                        UIApplication *app = [UIApplication sharedApplication];
                        app.networkActivityIndicatorVisible = YES;

                     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://[email protected]"]];

                         ** 使用openURL方法也可以打开其他应用,在不同应用之间互相调用对方。
                           ** 美图秀秀, 点击分享到"新浪微博", 打开"新浪微博"选择账号, 跳转回"美图秀秀", 开始分享

                      4> 通过UIApplication管理状态栏:
                            ** 自从iOS7开始可以通过两种方式来控制状态栏
                                1> 控制器
                                    * 通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)

                                    * 需要在控制器中实现如下方法:
                                    /** 参考代码:
                                     // 是否隐藏"状态栏"
                                     - (BOOL)prefersStatusBarHidden
                                     {
                                        return NO;
                                     }

                                     // 状态栏的样式
                                     - (UIStatusBarStyle)preferredStatusBarStyle
                                     {
                                        // 白色
                                        return UIStatusBarStyleLightContent;
                                     }

                                     */

                                2> UIApplication
                                    * 通过UIApplication管理(一个应用程序的状态栏都由它统一管理)

                                    ** iOS7开始状态栏默认交给了控制器来管理,如果希望通过UIApplication来管理,步骤如下:
                                        1> 在Info.plist文件中增加一个配置项
                                             * View controller-based status bar appearance = NO,

                                        2>然后编写如下代码:
                                        /** 参考代码:
                                         - (IBAction)click:(id)sender {

                                         UIApplication *app = [UIApplication sharedApplication];

                                         // 设置状态栏是否隐藏
                                         //app.statusBarHidden = YES;
                                         // 动画的方式
                                         //[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

                                         // 设置状态栏显示为白色
                                         // app.statusBarStyle = UIStatusBarStyleLightContent;
                                         // 动画的方式
                                         //[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
                                         }

                                         */

        5. UIApplicationDelegate介绍。
           ** 新建完项目以后的那个AppDelegate文件, 就是UIApplication的代理对象。
               * 并且该代理对象已经被设置好了, 无需我们手动设置了。

               * 在main函数中进行的设置
                 /**
                  int main(int argc, char * argv[]) {
                      @autoreleasepool {

                      // 设置启动UIApplication对象, 和对应的代理对象AppDelegate。
                      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
                  }

                  */

           ** App容易受到干扰。正在玩游戏,一个电话打过来了。
                * 应用程序的生命周期事件(如程序启动和关闭)
                * 系统事件(如来电)
                * 内存警告
                * … …

           ** 处理这些干扰事件,就要用到AppDelegate代理对象了。

           ** 总结: AppDelegate的主要作用就是处理(监听)应用程序本身的各种事件:
                * 应用程序启动

                * 应用程序进入后台

                * 应用程序进入前台

                * 内存警告

                * 等等, 都是应用程序自身的一些事件

                ** 要想成为UIApplication的代理对象, 必须遵守:UIApplicationDelegate协议。

            ** 代理中的若干方法介绍:
               1. - (BOOL)application:  didFinishLaunchingWithOptions:
               // app第一次启动完毕后就会调用(当程序启动后会显示一张启动图片, 当这个图片显示完毕, 消失后, 就开始调用这个方法)

               2. - (void)applicationDidEnterBackground:(UIApplication *)application
               // 当程序进入后台时, 调用该方法。(比如:按了Home键, 或者一个电话打过来了, 当前程序都会进入后台。)
               // 在这个方法中可以做一些保存当前程序数据, 暂停程序的操作。

               3. - (void)applicationWillEnterForeground:(UIApplication *)application
               // 当程序再次进入前台的时候调用。

               4. - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
               // 当发生内存警告时触发该事件。

       6. UIApplicationMain函数介绍。
       /**
        方法名:
        int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

        参数介绍:
        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, 则显示"黑屏"。

        */

        7. iOS程序启动过程。参考PPT上的图片。
             1> 打开程序。

             2> 调用main函数。

             3> 在main函数中调用:  UIApplicationMain()函数。
                * 在UIApplicationMain()函数中:
                    1. 创建UIApplication对象

                    2. 创建AppDelegate代理对象

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

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

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

             4> 程序退出。
时间: 2024-08-25 19:04:37

UI进阶之程序启动原理及UIApplication的相关文章

UI进阶--程序启动原理和UIApplication

本文转自:http://www.cnblogs.com/wendingding/p/3766347.html 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单

iOS开发UI篇—程序启动原理和UIApplication

iOS开发UI篇-程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对

iOS开发UI篇之16程序启动原理和UIApplication

原文  http://blog.csdn.net/u010927311/article/details/40145035 iOS 开发 UI 篇 — 程序启动原理和 UIApplication 一. UIApplication 1. 简单介绍 ( 1 ) UIApplication 对象是应用程序的象征,一个 UIApplication 对象就代表一个应用程序. ( 2 )每一个应用都有自己的 UIApplication 对象,而且是单例的,如果试图在程序中新建一个 UIApplication 

[转载自 文顶顶]iOS开发UI篇—程序启动原理和UIApplication

一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对象就是UIApplication对象,且只有一个(通过代码获

【转】iOS开发UI篇—程序启动原理和UIApplication

原文 http://www.cnblogs.com/wendingding/p/3766347.html 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对

2.iOS开发UI篇—程序启动原理和UIApplication

UIApplication委托 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对象就是UIApplicati

iOS程序启动原理

程序启动原理 掌握 Info.plist和pch文件的作用 UIApplication的常见使用 AppDelegate的代理方法 UIApplication.AppDelegate.UIWindow.UIViewController的关系 iOS程序的完整启动过程 … Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 在旧版本Xcode创建的工程中,这个

程序启动原理和UIApplication

iOS开发UI篇—程序启动原理和UIApplication 一.UIApplication 1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplication]可以获得这个单例对象 (4) 一个iOS程序启动后创建的第一个对

详解 IOS 7.1 程序启动原理

程序都是从Main方法入口的 IOS 也不例外 int main(int argc,char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 在IOS 里main 方法里有个UIApplicationMain里面带有4个参数 param 1: argc : 对应argv的参数数量 param 2: argv: