我只想在Finder.app PID发生变化时收到通知。 对于传统方法,我只是轮询以检查ID是否已更改。 我们没有任何其他方式可以进行民意调查。
注意:我尝试过使用NSNotificationCenter和NSWorkspaceDidLaunchApplicationNotification。它有效,但它也需要像NSRunLoop一样进行轮询。我想在没有任何投票方式的情况下收到通知。
- (void)appHasLaunched:(NSNotification *)notif
{
NSRunningApplication *runApp = [[notif userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
if ([runApp.bundleIdentifier isEqualToString:@"com.apple.finder"])
{
NSLog(@"start");
}
}
ws = [NSWorkspace sharedWorkspace];
NSNotificationCenter *notifyCenter = [ws notificationCenter];
[notifyCenter addObserver:self
selector:@selector(appHasLaunched:)
name:NSWorkspaceDidTerminateApplicationNotification
object:nil];
上面的代码完美无缺,但需要循环才能进行连续观察 例如,
[[NSRunLoop currentRunLoop] run];