ios - UIApplication

作者: 6e77c9b470d7 | 来源:发表于2019-04-12 08:42 被阅读21次

    UIApplication
    每一个应用程序都有自己的UIApplication单例对象。
    一个iOS程序启动后创建的第一个对象就是UIApplication对象。

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    //程序一开始返回了UIApplicationMain方法,并且还有4个参数:
    第三个参数 nil:代表UIApplication类名或者子类名称,nil 相当于 @"UIApplicaiton";
    第四个参数 :代表UIApplicaiton的代理名称 NSStringFromClass([AppDelegate class] 相当于 @"AppDelegate";
    

    UIApplicationMain底层实现

    // 1.创建UIApplication
    // 2.创建UIApplication代理对象,成为UIApplication代理
    // 3.开启主运行循环,处理事件,可以让程序一直在运行
    // 4.加载info.plist文件,判断有没有指定main.stroyboard,如果指定,就会去加载
    

    ios程序的启动过程 打开程序=>执行main函数=>执行UIApplicationMain=>初始化UIApplication(创建和设置代理对象,开启事件循环):监听系统事件和代理生命周期方法 =>结束程序

    利用UIApplication对象能进行一些应用级别的操作。
    1、设置应用程序图标的提醒数字

    UIApplication *app = [UIApplication sharedApplication];//可以获得单例对象。 
    app.applicationIconBadgeNumber = 10;
    // 创建通知对象
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
    / /注册用户通知
    [app registerUserNotificationSettings:setting];
    //注:苹果为了增强用户体验,在iOS8以后我们需要创建通知才能实现图标右上角提醒,iOS8之前直接设置applicationIconBadgeNumber的值即可。
    

    2、设置联网的提示

    app.networkActivityIndicatorVisible= YES;
    

    3、管理状态栏
    从iOS7开始,系统提供了2种管理状态栏的方式
    如果状态栏的样式只设置一次,那就用UIApplication来进行管理,并且UIApplication可以提供动画效果;
    如果状态栏是否隐藏,样式不一那就用每个控制器对自己的状态栏进行管理。
    3.1、通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)在iOS7中,默认情况下,状态栏都是由UIViewController管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式

    //状态栏的样式    - (UIStatusBarStyle)preferredStatusBarStyle;
    //状态栏的可见性  -(BOOL)prefersStatusBarHidden;
    #pragma mark-设置状态栏的样式
    -(UIStatusBarStyle)preferredStatusBarStyle
    {
      //设置为白色
      //return UIStatusBarStyleLightContent;
      //默认为黑色
       return UIStatusBarStyleDefault;
    }
    #pragma mark-设置状态栏是否隐藏(否)
    -(BOOL)prefersStatusBarHidden
    {
      return NO;
    }
    

    3.2、通过UIApplication管理(一个应用程序的状态栏都由它统一管理)如果想利用UIApplication来管理状态栏,首先得修改Info.plist的设置,添加iew controller-based status bar appearance行,并设置为NO即可

    //通过sharedApplication获取该程序的UIApplication对象
    UIApplication *app=[UIApplication sharedApplication];
    //设置状态栏的样式
    //app.statusBarStyle=UIStatusBarStyleDefault;//默认(黑色)
    //设置为白色+动画效果
    [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
    //设置状态栏是否隐藏
    app.statusBarHidden=YES;
    //设置状态栏是否隐藏+动画效果
    [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
    

    4、UIApplication有个功能十分强大的openURL:方法

    UIApplication *app = [UIApplicationsharedApplication];
    //打电话  [app openURL:[NSURLURLWithString:@"tel://110"]];
    //发短信  [app openURL:[NSURLURLWithString:@"sms://10086"]];
    //发邮件  [app openURL:[NSURLURLWithString:@"mailto://xxcc@fox.com"]];
    //打开一个网页资源 [app openURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    //打开其他app程序   openURL方法,可以打开其他APP。
    

    =================
    UIApplication Delegate
    当app收到系统事件,例如程序运行中来电等,这时UIApplicaiton会通知它的代理delegate对象,让delegate代理来处理这些系统事件。
    delegate可以处理的事件包括:
    1、应用程序的生命周期事件(如程序启动和关闭)
    2、系统事件(如来电)
    3、内存警告(用处较多)
    程序中的AppDelegate文件就是UIAppliacation的代理,它已经遵守了UIApplicationDelegate。

    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    

    AppDelegate的方法

    // AppDelegate:监听应用程序的生命周期
    // 以下方法就是应用程序的生命周期方法
    
    // 应用程序启动完成的时候就会调用AppDelegate的方法
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        NSLog(@"%s",__func__);
        return YES;
    }
    
    // 当应用程序失去焦点的时候调用
    - (void)applicationWillResignActive:(UIApplication *)application {
         NSLog(@"%s",__func__);
    }
    
    // 当应用程序进入后台的时候调用
    - (void)applicationDidEnterBackground:(UIApplication *)application {
         NSLog(@"%s",__func__);
        // 保存一些信息
    }
    
    // 当应用程序进入前台的时候调用
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        NSLog(@"%s",__func__);
    }
    
    // 当应用程序完全获取焦点的时候调用
    // 只有当应用程序完全获取焦点的时候,才能够与用户交互
    - (void)applicationDidBecomeActive:(UIApplication *)application {
         NSLog(@"%s",__func__);
    }
    
    // 当应用程序关闭的时候
    - (void)applicationWillTerminate:(UIApplication *)application {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:ios - UIApplication

        本文链接:https://www.haomeiwen.com/subject/nfdfwqtx.html