美文网首页
UIApplication

UIApplication

作者: crazyfox | 来源:发表于2018-08-28 13:13 被阅读22次

    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

    相关文章

      网友评论

          本文标题:UIApplication

          本文链接:https://www.haomeiwen.com/subject/qiymjxtx.html