什么是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文件,如果没有,那么应用程序加载完毕.
网友评论