Objective c nsrunning应用程序内存问题

Objective c nsrunning应用程序内存问题,objective-c,swift,cocoa,memory,nsrunningapplication,Objective C,Swift,Cocoa,Memory,Nsrunningapplication,我注意到一个重要的内存使用,它由计时器执行以下功能: _timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(test) userInfo:n

我注意到一个重要的内存使用,它由计时器执行以下功能:

_timer = [NSTimer scheduledTimerWithTimeInterval:0.01
                                          target:self
                                        selector:@selector(test)
                                        userInfo:nil
                                         repeats:YES];

- (void)test {
    NSRunningApplication *app = [NSWorkspace sharedWorkspace].frontmostApplication;
    app.processIdentifier;
}
代码基本上什么都不做

访问NSRunningApplication实例的几乎任何属性(bundleIdentifier、bundleURL、description…)都会导致内存使用量以每秒~1MB的速度增加(考虑到指定的时间间隔)。最糟糕的是它从未停止过。不过我还没试着把它限制到极限

我尝试使用Instruments(Leaks模板)对其进行分析,但它没有发现内存泄漏

有线索吗


编辑#1:

我做了一个简单的实验,用一个swift文件创建了一个控制台应用程序:

import Cocoa

while true {
    guard let app = NSRunningApplication(processIdentifier: 315) else {
        break
    }
}
把你所有的pid都放在运行中。 几秒钟后就要演出了


编辑#2:

我的最新发现是,流程类型直接影响行为。 考虑:

TransformProcessType(&psn, UInt32(processType))
如果processType=kProcessTransformToBackgroundApplication或KProcessTransformToielementApplication,我将面临这个问题。
如果process type=kProcessTransformToForegroundApplication(默认值),则一切正常。

新分配的对象是什么。仪器会告诉你的。0.01->我认为0.1-1.0是一个很好的值。自动删除池怎么样?@Willeke:autoreleasepool没有帮助。@MarekH:我不太理解你的问题。请看一看屏幕截图:要么是OSX版本,要么你有更多隐藏的代码。我在那里看到了一块石头,那东西很臭。我没有这个代码。在空项目上尝试此代码。时间间隔0.01会浪费资源和电池寿命。你真丢脸。CPU永远无法睡眠。我怀疑你做实时应用。