NSRunningApplication проблема с памятью
Я заметил значительное использование памяти, когда следующая функция выполнялась таймером:
_timer = [NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(test)
userInfo:nil
repeats:YES];
- (void)test {
NSRunningApplication *app = [NSWorkspace sharedWorkspace].frontmostApplication;
app.processIdentifier;
}
Код в основном ничего не делает.
Доступ практически к любому свойству (bundleIdentifier, bundleURL, description...) экземпляра NSRunningApplication приводит к увеличению использования памяти на ~1 МБ / с (с учетом указанного интервала времени). И хуже всего то, что это никогда не останавливается. Я еще не пытался поставить его до предела, хотя...
Я попытался профилировать его с помощью инструментов (шаблон утечки), но он не находит утечек памяти.
Любая подсказка?
Редактировать № 1:
Я выполнил простой эксперимент, создав консольное приложение с одним файлом swift:
import Cocoa
while true {
guard let app = NSRunningApplication(processIdentifier: 315) else {
break
}
}
Положите любой пид у вас работает. Это займет концерт в течение нескольких секунд...
Редактировать № 2:
Мой последний вывод заключается в том, что тип процесса напрямую влияет на поведение. Рассматривать:
TransformProcessType(&psn, UInt32(processType))
Если processType = kProcessTransformToBackgroundApplication или kProcessTransformToUIElementApplication, я сталкиваюсь с проблемой. Если тип процесса = kProcessTransformToForegroundApplication (значение по умолчанию), все работает отлично.