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

相关推荐
weixin_382395232 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__2 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.3 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~4 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华4 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子7 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅7 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni7 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学8 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端