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 (значение по умолчанию), все работает отлично.

0 ответов

Другие вопросы по тегам