來自 http://www.tanhao.me/pieces/966.html | 老谭
老潭的部落格蠻有深度的,可以多看看
在OSX开发的程序中,我们经常需要知道系统的一些状态改变而对程序做出一定的处理,比如系统睡眠、唤醒、切换用户、屏幕关闭、显示屏保等等系统状态。
获取这些状态改变的需要两种方式,方式1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(sleepMethod:)
name:NSWorkspaceWillSleepNotification
object:nil];
//其中能捕获到的状态有:
NSWorkspaceWillSleepNotification睡眠
NSWorkspaceDidWakeNotification从睡眠中唤醒
NSWorkspaceWillPowerOffNotification当用户注销或关机
NSWorkspaceSessionDidResignActiveNotification被切换到另一用户
NSWorkspaceSessionDidBecomeActiveNotification被切换回到当前用户
NSWorkspaceScreensDidSleepNotification屏幕睡眠
NSWorkspaceScreensDidWakeNotification屏幕唤醒 |
对于某一些系统状态(如屏保出现)就需要以下的NSDistributedNotificationCenter(跨进程的通知)来实现了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(screensaverStart:)
name:@"com.apple.screensaver.didstart"
object:nil];
//其中的通知名称可以是:
com.apple.screensaver.didstart屏保开始
com.apple.screensaver.willstop屏保将要结束
com.apple.screensaver.didstop屏保结束
com.apple.screenIsLocked屏幕锁住
com.apple.screenIsUnlocked屏幕解锁 |