美文网首页
iOS-UIApplication

iOS-UIApplication

作者: CDLOG | 来源:发表于2018-07-23 15:00 被阅读30次

    什么是UIApplication?

    UIApplication对象是应用程序的象征.
    每一个应用都有自己的UIApplication对象,这个对象是系统自动帮我们创建的, 它是一个单例对象.
    一个iOS程序启动后创建的第一个对象就是UIApplication对象
    我们只能通过[UIApplication sharedApplication]获得这个单例对象,不能够手动去创建它.

    UIApplication作用?

    利用UIApplication对象,能进行一些应用级别的操作.
    可以设置应用程序图标右上角的红色提醒数字
    设置联网指示器的可见性
    可以设置应用程序的状态栏
    进行应用之间的跳转.

    红色的提醒数字

    提醒数字之前必须注册相关的通知,否则无效

    
     UIApplication *app = [UIApplication sharedApplication];
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        }];
        app.applicationIconBadgeNumber = 10;
    
    

    打开其他应用或者链接

    1,链接网页或者应用

    如果链接的应用不存在,会返回NO,并且不会通过sa

     //应用程序通过协议头的类型,去打开相应的软件.
        NSURL *url =[NSURL URLWithString:@"http://www.baidu.com"];
    //如果设置为yes,如果链接的应用不存在,会返回NO,并且不会启动Safari链接
    //如果设置为no,如果链接的应用不存在,会返回yes,并且会启动Safari链接,传空字典就是设置为no
        NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
        [ [UIApplication sharedApplication] openURL:url options:options completionHandler:^(BOOL success) {
            NSLog(@"success value: %@" ,success?@"YES":@"NO");
        }];
    

    2,打电话

        [ [UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"] options:@{} completionHandler:nil];
    

    3发短信

        [ [UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"] options:@{} completionHandler:nil];
    

    UIApplication代理

    所有的移动操作系统都有个致命的缺点:app很容易受到打扰。
    比如一个来电或者锁屏会导致app进入后台甚至被终止
    还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,
    这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件

    delegate可处理的事件包括:
    应用程序的生命周期事件(如程序启动和关闭)
    系统事件(如来电)
    内存警告
    ...

    UIApplication会在程序一启动时候创建一个遵守UIApplicationDelegate代理.
    这个就是我们程序一创建时的AppDelegate类.AppDelegate就是遵守了UIApplicationDelegate协议.
    在这个类中很定义很多监听系统事件的方法.同时也定义了一些应用程序的生命周期方法.
    生命周期参考链接
    主要方法有:

    应用程序的生命周期,先获取焦点后进入前台,失去焦点后进入后台
    应用程序启动完成的时候调用

    - (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)applicationDidBecomeActive:(UIApplication *)application {
              NSLog(@"%s",__func__);
    }
    

    当我们应用程序即将进入前台的时候调用

    - (void)applicationWillEnterForeground:(UIApplication *)application {
              NSLog(@"%s",__func__);
    }
    

    当我们应用程序即将关闭的时候调用

    - (void)applicationWillTerminate:(UIApplication *)application {
              NSLog(@"%s",__func__);
    }
    

    程序完整启动流程

    1.执行Main
    2.执行UIApplicationMain函数.
    3.创建UIApplication对象,并设置UIApplicationMain对象的代理.
    UIApplication的第三个参数就是UIApplication的名称,如果指定为nil,它会默认为UIApplication.
    UIApplication的第四个参数为UIApplication的代理.
    4.开启一个主运行循环.保证应用程序不退出.
    5.加载info.plist.加载配置文件.判断一下info.plist文件当中有没有Main storyboard file base name
    里面有没有指定storyboard文件,如果有就去加载info.plist文件,如果没有,那么应用程序加载完毕.

    相关文章

      网友评论

          本文标题:iOS-UIApplication

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