AppKit(二):NSApplicationDelegate协议

NSApplicationDelegate协议

一个管理APP生命周期及其与公共系统服务交互的方法集合。

可这说是集合,简直就是一个方法海!咱们往下看......

声明

objectivec 复制代码
protocol NSApplicationDelegate : NSObjectProtocol

主题

加载application相关的

func applicationWillFinishLaunching(Notification)

通知代理application将要初始化完成

声明
swift 复制代码
@MainActor optional func applicationWillFinishLaunching(_ notification: Notification)
参数

notification

名为willFinishLaunchingNotification的通知。调用这个通知的对象方法,返回NSApplication本身。


再说一下willFinishLaunchingNotification通知, finishLaunching()方法开始前发送该通知,来表明APP完成初始化,并即将完成加载。
class let willFinishLaunchingNotification: NSNotification.Name 通知的对象是NSApp.该通知不包含在userInfo字典中。

引用于

Supporting Continuity Camera in Your Mac App


func applicationDidFinishLaunching(Notification)

通知代理APP初始化完成,但是还没有收到第一个事件。

参数

notification

名为didFinishLaunchingNotification的通知。调用这个通知的对象方法,返回NSApplication本身。

详情

通知对象是单例。参阅NSApplicationDidFinishLaunching User Keys,了解userInfo的键与值。不用参阅,其实就在下边。


NSApplicationDidFinishLaunching User Keys

在APP初始化阶段,系统传递给APP的,用来访问加载选项字典中值的键。

键名

class let launchIsDefaultUserInfoKey: String

该键的值是包含布尔值的NSNumber.如果APP启动来打开或者打印文件、执行Service操作、如果APP有将会恢复的保存状态、或者APP不是在默认情况下启动的,该值是false。其他情况下,值为true。

声明
kotlin 复制代码
class let launchIsDefaultUserInfoKey: String

class let launchUserNotificationUserInfoKey: String

表明用户从通知中心激活通知启动APP的键。

声明
kotlin 复制代码
class let launchUserNotificationUserInfoKey: String
详情

如果APP是因为用户激活通知中心的通知而启动,launchUserNotificationUserInfoKey键是一个存在于didFinishLaunchingNotification通知的userInfo字典中的NSUserNotification对象.访问userInfo中的此对象,你可以用如下方式:

objectivec 复制代码
NSUserNotification *userNotification = [[myNotification userInfo]
    objectForKey:NSApplicationLaunchUserNotificationKey];
    if (userNotification) {
        // The app was launched by a user selection from Notification Center.
    }

管理活跃状态相关的

func applicationWillBecomeActive(Notification)

通知代理,APP差不多要进入活跃状态了。

声明
swift 复制代码
@MainActor optional func applicationWillBecomeActive(_ notification: Notification)
参数

notification 名为willBecomeActiveNotification的通知。调用通知的对象方法,返回NSApplication对象本身。


func applicationDidBecomeActive(Notification)

通知代理,APP已经进入活跃状态。

声明
swift 复制代码
@MainActor optional func applicationDidBecomeActive(_ notification: Notification)
参数

notification

名为didBecomeActiveNotification的通知。调用通知的对象方法,返回NSApplication对象本身。


func applicationWillResignActive(Notification)

通知代理,APP将要成为不活跃状态,并且要失去焦点了。

声明
swift 复制代码
@MainActor optional func applicationWillResignActive(_ notification: Notification)
参数

名为willResignActiveNotification的通知,调用通知的对象方法,返回NSApplication对象本身。


func applicationDidResignActive(Notification)

通知代理,APP不再活跃,也没有了焦点。

声明
swift 复制代码
@MainActor optional func applicationDidResignActive(_ notification: Notification)
参数

notification 名为didResignActiveNotification的通知,调用通知的对象方法,返回NSApplication对象本身。

终止程序相关的

func applicationShouldTerminate(NSApplication) -> NSApplication.TerminateReply

返回一个表示是否应该终止APP的值。

声明
swift 复制代码
@MainActor optional func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply
参数

sender

即将被终止的那个application对象

返回值

一个表明application是否应该被终止的NSApplication.TerminateReply枚举常量。出于兼容性的考虑,false等于NSApplication.TerminateReply.terminateCanceltrue等于NSApplication.TerminateReply.terminationNow.

详情

程序的退出Quit菜单选项点击之后,或者调用terminate(_:)之后,会调用这个方法。一般情况下,应该返回NSApplication.TerminateReply.terminateNow,来完成终止操作,但是你也可以取消终止操作,或者根据需要推迟终止操作。例如,你可能需要在程序终止之前完成关键数据的处理,但是当你完成所需操作之后,需要立即调用reply(toApplicationShouldTerminate:)方法。

enum TerminateReply

决定是否应该终止APP的枚举常量。
\qquad case terminateNow
\qquad 完成终止操作。
\qquad case terminateCancel
\qquad 取消终止操作。
\qquad case terminateLater
\qquad 延迟终止操作。返回这个值会导致Cocoa将run loop运行NSModalPanelRunLoopMode中,直到APP调用reply(toApplicationShouldTerminate:),参数为truefalse。此返回值用于需要显示modal alert(sheet)来决定是否退出的代理。

初始化器

init?(rawValue: UInt)


func applicationShouldTerminateAfterLastWindowClosed(NSApplication) -> Bool

返回一个布尔值,该值表明是否最后一个窗口一旦关闭,程序就会终止。

声明
swift 复制代码
@MainActor optional func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool
参数

sender

最后一个窗口被关闭的application对象。

返回值

如果最后一个窗口关闭时不终止程序,返回false;否则返回true

详情

程序最后一个窗口关闭时,程序会发送这个消息给你的代理,不管是否有panel仍然处于打开状态,都会发送这个消息(这里的panel定义为一个NSPanel对象,或者是其子类)。

如果返回false,控制会回到主循环并且程序不会终止。如果返回true,随后会调用代理的applicationShouldTerminate(_:)方法来确认应该终止程序。


func applicationWillTerminate(Notification)

通知代理,APP即将终止。

声明
swift 复制代码
@MainActor optional func applicationWillTerminate(_ notification: Notification)
参数

notification

名为willTerminateNotification的通知,调用通知的对象方法,返回NSApplication对象本身。

详情

你的代理可以使用该方法来确认程序终止前的最终清理工作。该方法返回后,程序将被终止。

备注:

程序突然退出,不会调用这个方法。了解更多关于程序突然退出的信息,参见ProcessInfo

相关推荐
随风一样自由8 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
IMPYLH8 小时前
HTML 的 <data> 元素
前端·html
YHHLAI9 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
kyriewen11 小时前
我扒了 GPT-5.6 的全部编程跑分——有一项 OpenAI 没敢放出来
前端·gpt·ai编程
前端H11 小时前
微前端 v3 架构升级:从加载隔离到状态协同
前端·架构·状态模式
陆枫Larry13 小时前
小程序包体积优化:用 SVG 图片替换 iconfont,并保留 CSS 控色能力
前端
环境栈笔记14 小时前
多账号浏览器选型检查清单:Profile、权限、Session 和任务日志怎么评估
前端·人工智能·后端·自动化
前端炒粉14 小时前
手写promise
java·前端·javascript
LaughingZhu14 小时前
智能体经典范式构建:ReAct、Plan-and-Solve 与 Reflection
前端·react.js·前端框架
jsonbro14 小时前
手把手带你实现发布订阅模式
前端·vue.js·设计模式