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永远无法睡眠。我怀疑你做实时应用。