什么是UIApplication?
UIApplication对象是应用程序的象征,每个应用都有自己的UIApplication对象,当iOS程序启动后创建的第一个对象就是UIApplication对象,而且是单例的,通过[UIApplication shareApplication]
可以获得这个单例对象。利用UIApplication对象,能进行一些应用级别的操作。
它能设置哪些些应用级别操作
- 设置badge(应用图标上的小红点)
//1.设置应用程序图标的提醒数字
app.applicationIconBadgeNumber = 10;
//iOS8之后必须注册用户通知,否则不生效
//iOS10之前
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[app registerUserNotificationSettings:settings];
- 设置联网指示器的可见性(信号栏旁边的小菊花 )
//2.设置联网的提示
app.networkActivityIndicatorVisible = YES;
- 设置状态栏
//在Controller中的管理状态栏方法
- (BOOL)prefersStatusBarHidden{
return YES;
}
//利用UIApplication对象管理
//1.在info.plist文件中添加View controller-based status bar appearance 并将值设为NO
//2.设置隐藏
app.statusBarHidden=YES;
- 打开网页
[app openURL:[NSURL URLWithString:@"http://www.baidu.com"] options:nil completionHandler:nil];
UIApplication和delegate
所有的移动操作系统都有一个致命的缺点:app很容易收到干扰。比如一个来电或者锁屏,都会导致app进入后台甚至被终止,还有很多其他类似的情况会导致App受到干扰,在App收到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件。
delegate可处理的事件
- 应用程序的生命周期时间(如程序启动和关闭)
- 系统事件(如来电)
- 内存警告
AppDelegate其实就是UIApplication的delegate对象。
AppDelegate
- 程序启动完成就会调用的代理方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- 管理app生命周期的几个方法
//应用程序失去焦点的时候调用(将进入后台)
- (void)applicationWillResignActive:(UIApplication *)application
//当用户进入后台的时候调用
- (void)applicationDidEnterBackground:(UIApplication *)application
//当用户进入将前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application
//用户完全获取焦点(完全进入前台)
- (void)applicationDidBecomeActive:(UIApplication *)application
//App即将被Kill的方法
- (void)applicationWillTerminate:(UIApplication *)application
UIApplicationMain(Main函数中)
在main函数中调用UIApplicationMain
函数创建UIApplication和AppDelegate。
//UIApplicationMain
UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);
底层实现:
- 根据principalClassName参数传递的类名创建UIApplication对象
- 创建UIApplication代理对象,给 UIApplication设置代理
- 开启主运行事件循环,处理事件(RunLoop)
- 加载Info.plist,判断是否指定main,如果指定了,就去加载
如何抛异常
//创建异常
NSException * exc = [NSException exceptionWithName:@"异常名称" reason:@"异常原因" userInfo:nil];
//抛异常
[exc raise];