iOS UIApplication

2018-08-04  本文已影响0人  本本的开心牧场

记录一下这个强大的对象

UIApplication简介

实际在程序入口main中就立刻创建了UIApplication对象,所以我们能够通过单例拿到

int main(int argc, char * argv[]) {
    @autoreleasepool {
//这段代码就return了UIApplication对象
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

UIApplication能做些什么?
UIWindow *window = [UIApplication sharedApplication].keyWindow;

//值得注意的是,这时候获取到的window不一定是屏幕最前面的window
//因为像UIAlert和键盘等,都是在屏幕最前面的window,或者是modal出来的控制器。
//这时候需要获取最前面的窗口,不然就可能显示出问题。
获取顶层的keyWindow
UIWindow window = [[UIApplication sharedApplication].windows lastObject];
[window addSubview:aView];// 将要显示的view添加到窗口

UIApplication *app = [UIApplication sharedApplication];
app.applicationIconBadgeNumber = 30;
// 创建通知对象
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
// 注册用户通知
[app registerUserNotificationSettings:setting];

UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible= YES;
    UIApplication *app = [UIApplication sharedApplication];
    //    iOS10 新方法
    //    可以异步执行open操作和主线程执行回调.
    //    ptions目前可传入参数Key在UIApplication头文件只有一个:
    //    UIApplicationOpenURLOptionUniversalLinksOnly  默认为no
    //    设置yes时 只允许通过这个Link所代表的iOS应用跳转的方式打开这个链接 否则就会返回success为false
    //    就是说只有安装了Link所对应的App的情况下才能打开这个Universal Link,而不是通过启动Safari方式打开这个Link的代表的网站.
    //    打电话
    [app openURL:[NSURL URLWithString:@"tel://110"] options:@{} completionHandler:nil];
    //    发短信
    [app openURL:[NSURL URLWithString:@"sms://1008"] options:@{} completionHandler:nil];
    //    发邮件
    [app openURL:[NSURL URLWithString:@"mailto://xxcc@fox.com"] options:@{} completionHandler:nil];
    //    打开一个网页资源
    [app openURL:[NSURL URLWithString:@"http://www.baidu.com"] options:@{} completionHandler:nil];
    //    当然也可以打开其他app
//判断程序运行状态
    /*
     UIApplicationStateActive,   //活跃
     UIApplicationStateInactive,   //应用程序失去焦点 程序还在运行但是不可交互
     UIApplicationStateBackground    //后台模式
     */
 UIApplication *app = [UIApplication sharedApplication];
 if(app.applicationState ==UIApplicationStateActive){
        NSLog(@"程序在运行状态");
    }

  //阻止屏幕变暗,很耗电操作。
   UIApplication *app = [UIApplication sharedApplication];
   app.idleTimerDisabled =YES;
UIApplication Delegate

当app收到干扰,例如程序运行中来电等,就会产生一些系统事件,这时UIApplicaiton会通知它的代理delegate对象,让delegate代理来处理这些系统事件。
delegate可以处理的事件

  1. 应用程序的生命周期事件(如程序启动和关闭)
  2. 系统事件(如来电)
  3. 内存警告(用处较多)

每当我们创建项目时,程序中的AppDelegate文件就是UIAppliacation的代理,我们可以发现它已经遵守了UIApplicationDelegate。

// 应用程序启动完成的时候就会调用AppDelegate的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

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

END.....

上一篇 下一篇

猜你喜欢

热点阅读