UIApplication

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度方向更改状态栏动画的持续时间.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容