zoukankan      html  css  js  c++  java
  • UIApplication 和 Appdelegate-----iOS

    正文

    一 UIApplication

    1.一个UIApplication代表是一个应用程序,而且是单例的。一个程序也只能有一个UIApplication对象

    2.获取UIApplication对象: [UIApplication sharedApplication];

    3.当一个iOS程序启动后,首先创建的第一个对象就是UIApplication对象然后是UIWindow 然后是控件

    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://12345@qq.com"]];
    
                               
                               
                       //      ** 使用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>然后编写如下代码:

    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];
                                             }
    
                                             
                                             */

     

    二 AppDelegate中的若干方法介绍:
                * - (BOOL)application:didFinishLaunchingWithOptions:
                  app加载完毕的时候调用

                * - (void)applicationWillResignActive:
                   app失去焦点的时候调用(失去焦点UI控件就不能正常使用了, 然后app就可以进入后台了)

                * - (void)applicationDidEnterBackground:
                   app进入后台的时候调用(app消失不见)

                * - (void)applicationWillEnterForeground:
                   app进入前台的时候调用(app显示出来)

                * - (void)applicationWillTerminate:
                   app终结, app关闭的时候调用(但一般情况下不会调用).
                   注意: 当一个应用进入后台(休眠)状态下时, 然后再关闭该应用, 并不会调用applicationWillTerminate:
    方法。原因: 当应用进入"休眠"状态下的时候是无法接收任何事件的(比如关闭)。但是有些应用在进入后台的时候, 并不休眠(比如"音乐播放器"、"QQ"等。要实现这种效果需要在"info.plist"中增加一个配置: 配置该应用的类型。 )参考:http://www.cnblogs.com/tracy-e/p/3151457.html

                ** 在上面的四个代理方法中输出一句话, 验证执行顺序。

    三 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, 则显示"黑屏"。
            
            */


        iOS程序启动过程。
                 1> 打开程序。
                               
                 2> 调用main函数。
                               
                 3> 在main函数中调用:  UIApplicationMain()函数。
                    * 在UIApplicationMain()函数中:
                        1. 创建UIApplication对象
                               
                        2. 创建AppDelegate代理对象
                               
                        3. 将AppDelegate代理对象设置给UIApplication对象。
                               
                        4. 程序启动完毕: 触发application:didFinishLaunchingWithOptions事件。
                               
                        5. 在UIApplicationMain()函数开启一个"死循环(事件循环)", 所以程序不会退出, 我们可以任意使用。在这个"死循环(事件循环)"中程序不断监听用户的各种事件, 依次处理(依靠"事件队列"实现)。
                               
                 4> 程序退出。

  • 相关阅读:
    hibernate课程 初探单表映射2-7 hbm配置文件常用设置
    SQL partition (小组排序)
    修改input的text 通过jquery的html获取值 未变化
    ASP.NET MVC5使用Area区域
    MVC 缓存
    C# 后台访问webapi
    分布式系统
    滴滴出行技术总监:关于技术选型的那些事儿
    Json Self referencing loop detected
    VMWare 安装 Eclipse
  • 原文地址:https://www.cnblogs.com/miaomiaocat/p/5080575.html
Copyright © 2011-2022 走看看