UIApplication
UIApplication
程序启动时,main文件调用UIApplicationMain方法,此方法生成一个UIApplication单例,调用[UIApplication sharedApplication]获取此单例
程序中的作用
UIApplication的主要作用是处理用户事件,他会起一个队列,把用户事件全部放入队列,按顺序处理,处理的时候,会发送事件到合适的控件进行处理。(https://www.jianshu.com/p/257d9f793c06)
UIApplication还维护了一个UIWindow对象,这样可以接触到所有的界面元素。
UIApplication还有UIApplicationDelegate委托,用来处理程序生命周期事件,还有系统事件(来电,记事项警告)
生命周期
1、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
说明:当应用程序正常启动时(不包括已在后台转到前台的情况),调用此回调。launchOptions是启动参数,假如用户通过点击push通知启动的应用,(这是非正常启动的情况,包括本地通知和远程通知),这个参数里会存储一些push通知的信息。
2、- (void)applicationWillResignActive:(UIApplication *)application
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
3、- (void)applicationDidBecomeActive:(UIApplication *)application
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
4、- (void)applicationDidEnterBackground:(UIApplication *)application
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
5、- (void)applicationWillEnterForeground:(UIApplication *)application
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟4相反。
6、- (void)applicationWillTerminate:(UIApplication *)application
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
7、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
8、- (void)applicationSignificantTimeChange:(UIApplication*)application
说明:当系统时间发生改变时执行
9、- (void)applicationDidFinishLaunching:(UIApplication*)application
说明:当程序载入后执行
10、- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
说明:当客户端注册远程通知时,会回调的方法。
如果成功,则回调这个方法,客户端把deviceToken取出来发给服务端,push消息的时候要用。
如果失败了,则回调下面的方法,可以从error参数中看一下失败原因。
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
11、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
说明:当StatusBar框将要变化时执行
-
(void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientationduration:(NSTimeInterval)duration
说明:当StatusBar框方向将要变化时执行 -
(void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
说明:当StatusBar框方向变化完成后执行 -
(void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
说明:当StatusBar框变化完成后执行
12、- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
说明:当通过url执行
13- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
说明:当应用在前台运行中,收到远程通知时(不会弹出系统通知界面),会回调这个方法。
当应用在后台状态时,点击push消息启动应用,也会回调这个方法。
当应用完全没有启动时,点击push消息启动应用,就不会回调这个方法。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler
与上一方法相同,区别是在后台时亦可执行方法,但要开启相关权限。如图。
UIApplication部分常用功能
1.设置icon上的数字图标,缺省为0
[UIApplication sharedApplication].applicationIconBadgeNumber = 1;
2.设置摇动手势的时候,是否支持redo,undo操作,缺省YES
[UIApplication sharedApplication].applicationSupportsShakeToEdit =YES;
3.判断程序运行状态
typedef NS_ENUM(NSInteger, UIApplicationState) {
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
} NS_ENUM_AVAILABLE_IOS(4_0);
if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){
NSLog(@"程序在运行状态");
}
4.阻止屏幕变暗进入休眠状态,缺省为no
[UIApplication sharedApplication].idleTimerDisabled =YES;
非常耗电。
5.显示联网状态动画
[UIApplication sharedApplication].networkActivityIndicatorVisible =YES;
6.设置状态栏的样式
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault = 0, // 默认样式,黑字,适用于浅色背景(iOS6及以下系统状态栏为黑底白字)
UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // 白字,适用于深色背景
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,// 白字(iOS6及以下系统在启动界面为灰底白字,iOS7及以上系统与UIStatusBarStyleBlackOpaque效果一样)
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,// 白字,适用于深色背景(iOS6及以下系统状态栏为黑底白字)
} __TVOS_PROHIBITED;
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
隐藏状态栏
[UIApplication sharedApplication].statusBarHidden = YES;
7.调用系统功能
openURL是UIApplication中一个非常强大的方法,使用其可以调用系统相关功能。其方法有
- (BOOL)openURL:(NSURL*)url ;
- (BOOL)canOpenURL:(NSURL *)url ;
参考:https://www.jianshu.com/p/4d8f533fadac
https://www.jianshu.com/p/f0a2117406d8
http://keyliu.com