1

我想知道是否有人建议使用 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 的替代方案可能不起作用。提前感谢您的任何想法。

4

2 回答 2

1

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

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

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

于 2016-01-24T01:39:00.860 回答
1

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

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

于 2016-01-24T03:11:09.173 回答