UIApplication

2018-08-28  本文已影响22人  crazyfox

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参数中看一下失败原因。

11、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

说明:当StatusBar框将要变化时执行

12、- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

说明:当通过url执行

13- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

说明:当应用在前台运行中,收到远程通知时(不会弹出系统通知界面),会回调这个方法。
当应用在后台状态时,点击push消息启动应用,也会回调这个方法。
当应用完全没有启动时,点击push消息启动应用,就不会回调这个方法。

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

上一篇下一篇

猜你喜欢

热点阅读