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