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

相关推荐
爱勇宝1 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen1 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518134 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode4 小时前
Redis 在生产项目的使用
前端·后端
LiaCode4 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端
大刚测试开发实战4 小时前
如何内网穿透访问本地私有化部署的TestHub
前端·后端·github
风骏时光牛马4 小时前
# Ruby基于Rails框架实现多角色权限管理与数据分页查询完整实战代码案例
前端
weedsfly4 小时前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
xiaodaoluanzha4 小时前
迄今為止,最簡單的編程語言 Nolang
前端·后端
Csvn4 小时前
Fetch 请求竞态终结者:AbortController 不只是用来"取消"的
前端