NSWorkspace sharedWorkspace运行应用程序导致内存泄漏;替代选择?

时间:2016-01-23 23:30:40

标签: objective-c macos cocoa nsworkspace nsrunningapplication

我想知道是否有人建议使用runningApplications,因为以下内容似乎会泄漏内存:

https://openradar.appspot.com/24067155 https://github.com/bradjasper/NSRunningApplicationMemoryLeaks

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(checkApps:) userInfo:nil repeats:YES];

}

- (void) checkApps : (id) sender {

    @autoreleasepool {

        NSArray *appsArray = [[NSWorkspace sharedWorkspace] runningApplications];

        for (NSRunningApplication *a  in appsArray) {
            NSLog(@"%@", [a localizedName]);
        }

    }

}    

唯一的选择是等到Apple提供解决方案吗?我在沙盒环境中工作,因此一些基于NSTask的替代方案可能无法正常工作。提前感谢任何想法。

2 个答案:

答案 0 :(得分:1)

您的问题的答案是,还有另一个沙盒选项吗?:不是。这就是你应该如何寻找正在运行的应用程序。

您可以尝试使用KVO(在sharedWorkspace的runningApplications属性上)。文档建议这样做而不是你正在做的事情:

  

使用键值观察来通知此数组属性的更改,而不是轮询。

答案 1 :(得分:1)

经过相当多的故障排除后,我最终发现在从Xcode(版本7.2(7C68))构建/运行应用程序/项目时,会发生内存泄漏问题 。如果我构建项目,然后进入Finder并手动启动构建的应用程序,内存分配似乎会稳定下来。

我没有启用Zombie对象,并且我没有对默认项目设置进行任何更改。这必须是Xcode中的一个错误。