Objective c NSWorkspace sharedWorkspace运行导致内存泄漏的应用程序;替代方案?

Objective c NSWorkspace sharedWorkspace运行导致内存泄漏的应用程序;替代方案?,objective-c,macos,cocoa,nsworkspace,nsrunningapplication,Objective C,Macos,Cocoa,Nsworkspace,Nsrunningapplication,我想知道是否有人对使用runningApplications的替代方案提出了建议,因为以下情况似乎是内存泄漏: 等待苹果提供解决方案是唯一的选择吗?我在沙盒环境中工作,因此一些基于NSTask的替代方案可能不起作用。提前感谢您的建议。您的问题的答案是,还有其他沙盒选项吗?:没有。这是您寻找正在运行的应用程序的方式 您可以改为尝试KVO(在sharedWorkspace的runningApplications属性上)。文档建议您这样做,而不是您正在做的事情: 不要轮询,而是使用键值来通知此数组

我想知道是否有人对使用runningApplications的替代方案提出了建议,因为以下情况似乎是内存泄漏:


等待苹果提供解决方案是唯一的选择吗?我在沙盒环境中工作,因此一些基于NSTask的替代方案可能不起作用。提前感谢您的建议。

您的问题的答案是,还有其他沙盒选项吗?:没有。这是您寻找正在运行的应用程序的方式

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

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


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


我没有启用僵尸对象,也没有对默认项目设置进行任何更改。这一定是Xcode中的一个bug。

您是否使用了仪器来找出泄漏的原因和原因?我按照编写的代码运行,没有发现任何累积现象。这可能是因为在您所在的版本和我所在的版本(我在beta中)之间修复了一个bug,或者可能是一些奇怪的配置问题;你们有僵尸或者类似的东西吗?仪器并没有检测到泄漏,但内存分配一直在增加。。。我的示例项目中未启用僵尸对象。我必须在OS X的最新beta版中进行测试。我的项目是在10.11.3(15D21)的公共版本下运行的。值得注意的是,您似乎必须实际处理appsArray中的NSRunningApplication对象(如记录其localizeName或类似内容)。在我的测试中,从运行的应用程序中简单地alloc init'ing数组不会重现泄漏。我没有提到这一点是我的错,但是在使用KVO时也会发生内存泄漏。为此使用NSTimer只会加快内存分配。不过你是对的,KVO就是这样做的。
- (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]);
        }

    }

}