タイマーによって次の関数が実行されると、メモリが大量に使用されることに気付きました。
_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:
私は簡単な実験を行い、単一の迅速なファイルでコンソール アプリケーションを作成しました。
import Cocoa
while true {
guard let app = NSRunningApplication(processIdentifier: 315) else {
break
}
}
実行中の pid を入力します。数秒でギグがかかります...
編集#2:
私の最新の発見は、プロセスの種類が動作に直接影響するということです。検討:
TransformProcessType(&psn, UInt32(processType))
processType = kProcessTransformToBackgroundApplication または kProcessTransformToUIElementApplication の場合、問題に直面します。プロセス タイプ = kProcessTransformToForegroundApplication (デフォルト値) の場合、すべてが正常に機能します。