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.terminateCancel
;true
等于NSApplication.TerminateReply.terminationNow
.
详情
程序的退出Quit
菜单选项点击之后,或者调用terminate(_:)
之后,会调用这个方法。一般情况下,应该返回NSApplication.TerminateReply.terminateNow
,来完成终止操作,但是你也可以取消终止操作,或者根据需要推迟终止操作。例如,你可能需要在程序终止之前完成关键数据的处理,但是当你完成所需操作之后,需要立即调用reply(toApplicationShouldTerminate:)
方法。
enum TerminateReply
决定是否应该终止APP的枚举常量。
<math xmlns="http://www.w3.org/1998/Math/MathML"> \qquad </math>case terminateNow
<math xmlns="http://www.w3.org/1998/Math/MathML"> \qquad </math>完成终止操作。
<math xmlns="http://www.w3.org/1998/Math/MathML"> \qquad </math>case terminateCancel
<math xmlns="http://www.w3.org/1998/Math/MathML"> \qquad </math>取消终止操作。
<math xmlns="http://www.w3.org/1998/Math/MathML"> \qquad </math>case terminateLater
<math xmlns="http://www.w3.org/1998/Math/MathML"> \qquad </math>延迟终止操作。返回这个值会导致Cocoa将run loop
运行NSModalPanelRunLoopMode
中,直到APP调用reply(toApplicationShouldTerminate:)
,参数为true
或false
。此返回值用于需要显示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