iOS UIApplication类
iOS UIApplication类

iOS UIApplication类

UIApplication 是什么?

UIApplication 是 UIKit 框架中代表整个 iOS 应用程序实例的一个类(单例模式)。它在程序启动时就被系统创建,生命周期贯穿整个 App 运行过程。

它的职责类似于操作系统与 App 之间的中介,主要用于:

监听应用状态(前台、后台、活跃等)。

管理 UI 生命周期。

调用系统功能(如打电话、发邮件、换图标、打开 URL)。

派发事件(触摸、摇晃等)。

管理窗口、状态栏、后台任务等。

访问UIApplication

UIApplication 是一个单例,系统会自动创建。访问方式如下:

let app = UIApplication.shared

这是使用它的唯一方式 —— 不能手动初始化它

常用属性和方法

1、应用状态管理

UIApplication.shared.applicationState  // .active / .inactive / .background
UIApplication.shared.isIdleTimerDisabled = true  // 防止设备锁屏
UIApplication.shared.isStatusBarHidden = true    // 控制状态栏隐藏(iOS 13 前)

2、生命周期代理

UIApplication.shared.delegate?.applicationDidEnterBackground(...)
UIApplication.shared.delegate?.applicationWillTerminate(...)

这些方法常见于 AppDelegate,但实际是从 UIApplication 调用的。

3、系统功能调用

UIApplication.shared.open(URL(string: "https://apple.com")!)  // 打开链接
UIApplication.shared.setAlternateIconName("NewIcon")          // 更换 App 图标
UIApplication.shared.registerForRemoteNotifications()         // 注册远程推送

4、UI 控制入口

UIApplication.shared.windows              // 获取所有窗口(包含多个 Scene)
UIApplication.shared.keyWindow            // 当前激活窗口(iOS 13 后不建议)
UIApplication.shared.sendAction(...)      // 派发 responder chain 事件

iOS Scene后的变化

iOS 13 引入了多 Scene,UIApplication 不再直接持有唯一的窗口,而是每个 Scene 有自己的窗口。

UIApplication.shared.connectedScenes
UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate

与 SwiftUI 的结合

在 SwiftUI 中用 @main 标记的 App 会自动管理 UIApplication 与 Scene:

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

依然可以通过 UIApplication.shared 做系统操作,比如退出键盘、换图标等。

使用示例

1、关闭键盘

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)

2、更换App图标

UIApplication.shared.setAlternateIconName("NewIcon") { error in
    if let error = error {
        print("图标更换失败:\(error)")
    }
}

3、打开网页

if let url = URL(string: "https://apple.com") {
    UIApplication.shared.open(url)
}

注意事项

1、UIApplication 是单例,不能自己创建或替换。

2、iOS 13+ 使用 Scene 后,需要注意不再用 keyWindow,而是 Scene 的 window。

3、某些属性如 statusBarHidden 在 iOS 13 后被废弃,使用 UIViewController 控制更安全。

总结

UIApplication 是 iOS 系统与 App 的桥梁,掌控着整个 App 的运行状态、生命周期、事件派发和系统交互,是 UIKit 和 SwiftUI 中系统功能的核心对象。

相关文章

1、SwiftUI更换应用图标:https://fangjunyu.com/2025/01/28/swiftui%e6%9b%b4%e6%8d%a2%e5%ba%94%e7%94%a8%e5%9b%be%e6%a0%87/

2、SwiftUI和iOS核心类UIViewController:https://fangjunyu.com/2025/05/19/swiftui%e5%92%8cios%e6%a0%b8%e5%bf%83%e7%b1%bbuiviewcontroller/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注