如何使用KVO来检测应用程序何时激活?
问题描述:
我在Cocoa应用程序以下代码:如何使用KVO来检测应用程序何时激活?
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSArray* arrayAppList = [[NSWorkspace sharedWorkspace] runningApplications];
}
我的目的是使用KVO时改变其不活动状态之间以活性检测的应用程序。
我读到我必须使用实例方法-addObserver:forKeyPath:options:context:
然后用-observeValueForKeyPath:ofObject:change:context:
应对变化的通知。
我明白-observeValueForKeyPath
是一个回调方法,在那里我可以编写代码来对属性变化我感兴趣的回应。
不过,我觉得困惑如何我一定要使用的addObserver方法,为了通知当runningApplications
的active
属性发生变化时。现在,我想知道注册地点在哪里,因为现在我正在使用-applicationDidFinishLaunching
,但不确定是否是正确的注册地点。另外,如果我使用-observeValueForKeyPath
回调方法,则必须在继承自NSObject
的类中实现它,并且它与注册通知的类相同。
答
你应该调用
runningApplications
阵列中的每个对象上的addObserver:…
法(使用isActive
作为关键路径)。在应用程序完成启动后开始观察,听起来很正确。时间方面,就是这样。至于这个地方,应该有一个专门用于这些观察的单独的课程。通过在应用程序委托中实施观察代码,您违反了单一职责原则(这意味着长期头痛)。
observeValueForKeyPath:…
回调应该由调用addObserver:…
方法的对象实现。