如何使用KVO来检测应用程序何时激活?

问题描述:

我在Cocoa应用程序以下代码:如何使用KVO来检测应用程序何时激活?

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    NSArray* arrayAppList = [[NSWorkspace sharedWorkspace] runningApplications]; 
} 

我的目的是使用KVO时改变其不活动状态之间以活性检测的应用程序。

我读到我必须使用实例方法-addObserver:forKeyPath:options:context:

然后用-observeValueForKeyPath:ofObject:change:context:应对变化的通知。

我明白-observeValueForKeyPath是一个回调方法,在那里我可以编写代码来对属性变化我感兴趣的回应。

不过,我觉得困惑如何我一定要使用的addObserver方法,为了通知当runningApplicationsactive属性发生变化时。现在,我想知道注册地点在哪里,因为现在我正在使用-applicationDidFinishLaunching,但不确定是否是正确的注册地点。另外,如果我使用-observeValueForKeyPath回调方法,则必须在继承自NSObject的类中实现它,并且它与注册通知的类相同。

  1. 你应该调用runningApplications阵列中的每个对象上的addObserver:…法(使用isActive作为关键路径)。

  2. 在应用程序完成启动后开始观察,听起来很正确。时间方面,就是这样。至于这个地方,应该有一个专门用于这些观察的单独的课程。通过在应用程序委托中实施观察代码,您违反了单一职责原则(这意味着长期头痛)。

  3. observeValueForKeyPath:…回调应该由调用addObserver:…方法的对象实现。