我想知道是否有人建议使用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]);
        }

    }

}


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

最佳答案

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

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


  与其轮询,不如使用键值观察功能来通知此数组属性更改。

关于objective-c - NSWorkspace sharedWorkspace runningApplications导致内存泄漏;替代选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34970273/

10-12 00:41