iOS中运行的应用程序的集中控制和协调点.
概述
每个iOS应用程序都只有一个 UIApplication 的实例 (少部分是 UIApplication 的子类).启动应用时,系统调用 UIApplicationMain 函数; 在其他任务中,此函数创建一个 Singleton UIApplication 对象(单例). 在此之后可以通过 sharedApplication 类方法调用访问.
application 对象的主要作用是处理初始化传入的用户事件进程(原文 : A major role of your app's application object is to handle the initial routing of incoming user events.). 它调度由控制对象 (UIControl 的实例) 转发给它的动作消息(action message) 到适当的目标对象. application 对象维护一个打开的窗口列表 (UIWindow 对象),通过这些可以检索任何应用程序的 UIView 对象.
UIApplication 类定义了一个一个 delegate, 这个 delegate 遵循 UIApplicationDelegate 协议, 并且必须实现一些协议的方法. application 对象向 delegate 通知重要的 runtime 事件 --- 例如应用程序的启动, 低内存警告和应用程序终止 --- 使其有机会进行适当的响应.
应用程序可以通过 openUrl: 的方法协作处理资源, 如电子邮件或者图像文件. 使用邮件的 URL 会直接启动邮件 app 并且显示消息.
这个类中的一些 API 允许程序员对设备进行特殊的行为操作. 使用 UIApplication 的对象执行以下操作 :
- 临时暂停传入触摸事件 (beginlgnoringInteractionEvents)
- 注册远程通知 (unregisterForRemoteNotifications)
- 触发撤销重做 (undo-redo) UI (applicationSupportsShakeToEdit)
- 确定是否有已安装的 app 注册处理 URL scheme (canOpenURL:)
- 拓展应用程序的执行,使其可以在后台完成任务 (beginBackgroundTaskWithExpirationHandler: , beginBackgroundTaskWithName: expirationHandler:)
- 安排和取消本地通知 (scheduleLocalNotification: , cancelLocalNotification:)
- 协调遥控事件的接收 (beginReceivingRemoteControlEvents , endReceivingRemoteControlEvents)
- 执行应用级状态恢复任务
子类注释(Subclassing Notes)
大多数的 app 不需要对 UIApplication 进行子类化. 相反, 使用 app delegate 来管理系统和应用程序间的交互.
如果 app 必须在系统执行之前处理传入事件 (这种情况很罕见),你可以自定义事件或者操作调度机制.为了做到这一点, 可以子类化 UIApplication 并覆盖 (Override) sendEvent: 和/或 sendAction:to:from:forEvent: 方法. 对于程序员拦截的每个事件, 在处理事件之后调用 [super sendEvent: event ] 将其发回系统. 拦截事件很少需要, 如果可能, 尽量避免这么做.
Topics
获取 app 实例 :
- sharedApplication 返回 app 实例的单例.
获取 app delegate :
- delegate ;
获取 app windows :
- keyWindow : app 的 key window
- windows : app 的可见和隐藏的 windows . 返回对象为 NSArray ,这个列表不包括有系统创建和管理的窗口,例如用于显示状态栏的窗口.这个数组中的window 按照从后往前的 window level 顺序排列,因此,最后一个窗口是位于 app 窗口的顶部.
控制和处理事件 :
- - sendEvent: 将事件调度到 app 中的相应响应者对象.
- - sendAction:to:from:forEvent: : 将选择器识别的动作消息发送到指定目标
- - beginIgnoringInteractionEvents : 告知接收者暂停处理触摸事件.
- - endIgnoringInteractionEvents : 告知接收者恢复相关事件的处理.
- ignoringInteractionEvents : 一个布尔值, 指示接收者是否忽略由触摸在屏幕上启动的事件.
- applicationSupportsShakeToEdit : 一个布尔值,用于确定摇动设备是否显示撤销重做用户界面.
打开 URL 资源 :
- - openURL (iOS 10 以后废弃)
- - openURL:options:completionHandler: (iOS 10 以后启用) : 尝试以异步的方式打开指定的 URL 资源.
- - canOpenURL : 返回一个布尔值, 指示 URL 的 scheme 是否可以有设备上安装的某些其他 app 处理.
配置用户通知设置 :
- registerUserNotificationSettings: (iOS8 - iOS10) : 注册首选选项,通知用户.
- currentUserNotificationSettings (iOS8 - iOS10) : 返回 app 的用户通知设置.
注册远程通知 :
- - registerForRemoteNotifications : 注册通过 Apple Push Notification 服务接收远程通知.
- - unregisterForRemoteNotifications : 取消注册通过 Apple Push Notification 服务接收远程通知.
- registeredForRemoteNotifications : 一个布尔值, 指示 app 当前是否注册了远程通知.
管理后台执行 :
- applicationState : app 的 runtime 状态
- backgroundTimeRemaining : app 在后台运行的时间量
- backgroundRefreshStatus : app 进入到后台,使其可以执行 background behaviors 的能力.
- - setMinimumBackgroundFetchInterval: 指定后台提取操作之间必须经过的最短时间.
- - beginBackgroundTaskWithName:expirationHandler: 标记具有指定名称的新的长时间运行的后台任务开始.
- - beginBackgroundTaskWithExpirationHandler : 标记着一个新的长期运行的后台任务的开始.
- - endBackgroundTask : 标记特定长时间运行的后台任务结束.
管理应用程序空闲计时器 :
- idleTimerDisabled : 一个布尔值, 用户控制应用程序是否禁用空闲计时器. 此属性默认值为 NO ,当用户长时间没有触碰输入时,系统会根据此值来判断将屏幕变暗,甚至设置为"睡眠状态". 通常游戏中会把这个值设置为 YES ,禁用空闲计时器来避免系统睡眠.
管理恢复状态行为 :
- - extendStateRestoration : 告诉 app 代码异步还原状态
- - completeStateRestoration : 告诉 app 代码已经完成异步状态恢复
- - ignoreSnapshotOnNextApplicationLaunch : 防止 app 在下一个启动周期中使用最近的快照.
- + registerObjectForStateRestoration: restorationIdentifier: 注册自定义对象用于 state restoration system.
管理主屏幕的3D快捷操作 :
- shortcutItems : 主屏幕为 app 动态快速操作; 可用于支持 3D Touch 的设备上. 此数组中的项目是 UIApplicationShortcut
Item 类,设置此属性以快速注册一系列动态快速操作, 以在用户按下 app 图标时在主屏幕上显示.
确定受保护内容的可用性 :
- protectedDataAvailable : 一个布尔值, 表示内容保护是否处于活动状态.
注册远程控制事件 :
- - beginReceivingRemoteControlEvents : 告诉 app 开始接受远程控制事件
- - endReceivingRemoteControlEvents : 告诉 app 停止接受远程控制事件.
控制 app 外观 :
- statusBarFrame : 设置 statues bar 的区域
- networkActivityIndicatorVisible : 打开或者关闭网络活动指示器的布尔值.
- userInterfaceLayoutDirection : 返回用户界面的布局方向;
管理应用程序的图标 :
- applicationIconBadgeNumber : 该数字目前被设置为在 Springboard 中的应用程序图标的徽章.
- supportsAlternateIcons : 一个布尔值, 指示 app 是否允许更改其图标.
- alternateIconName : app 正在显示的图标的名称.
- - setAlternateIconName: completionHandler: 更改 app 的图标.
获取字体大小的偏好 :
- preferredContentSizeCategory : 用户喜欢的字体大小选项
管理默认界面方向 :
- supportedInterfaceOrientationsForWindos : 返回指定窗口中用于视图控制器的默认接口方向集合.
管理状态栏方向 :
- statusBarOrientationAnimationDuration : 90度方向更改状态栏动画的持续时间.