2016-01-23 4 views
1

Я хотел бы знать, кто имеет ли предложение для альтернативы использованию runningApplications, а что-то вроде следующего, как представляется, утечки памяти:NSWorkspace sharedWorkspace runningApplications, вызывающий утечку памяти; альтернативный вариант?

https://openradar.appspot.com/24067155 https://github.com/bradjasper/NSRunningApplicationMemoryLeaks

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 

    [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(checkApps:) userInfo:nil repeats:YES]; 

} 

- (void) checkApps : (id) sender { 

    @autoreleasepool { 

     NSArray *appsArray = [[NSWorkspace sharedWorkspace] runningApplications]; 

     for (NSRunningApplication *a in appsArray) { 
      NSLog(@"%@", [a localizedName]); 
     } 

    } 

}  

является единственным вариантом для ждать, пока Apple предоставит решение? Я работаю в изолированной среде, поэтому некоторые альтернативы, основанные на NSTask, могут не работать. Заранее спасибо за любые идеи.

+0

Использовали ли вы инструменты, чтобы выяснить, что протекает и почему? – bbum

+0

Я запустил код, как написано, и со временем не заметил никаких аккреций. Это может быть связано с тем, что ошибка была исправлена ​​между выпуском, в котором вы находитесь, и релизом, на котором я работаю (я в бета-версии), или это может быть какая-то странная проблема конфигурации; у вас есть зомби или что-то в этом роде? – bbum

+0

Инструменты не обнаруживают утечку, но распределение памяти постоянно увеличивается и увеличивается ... http://cl.ly/363F050O1k2e Объекты зомби не включены в моем примере проекта. Мне нужно будет протестировать последнюю бета-версию OS X. Мой проект запущен в рамках публичной версии 10.11.3 (15D21). – x74353

ответ

1

Ответ на ваш вопрос, есть ли другой вариант с песочницей ?: нет. Вот как вы должны искать запущенные приложения.

Вместо этого вы можете попробовать KVO (в свойстве runningApplications для sharedWorkspace). В документации предлагается сделать это, а не то, что вы делаете:

Вместо опроса используйте наблюдение за значением ключа, чтобы получать уведомления об изменениях этого свойства массива.

+0

Это моя ошибка, если не упомянуть об этом, но утечка памяти возникает и при использовании KVO. Использование NSTimer для этого просто ускоряет выделение памяти. Вы правы, но KVO - это способ сделать это. – x74353

1

После изрядная дополнительной устранения неполадок, я в конце концов обнаружил, что проблема утечки памяти только происходит при создании/запуска приложения/проекта с Xcode (версия 7.2 (7C68)). Если я создам проект, а затем направляюсь в Finder и вручную запускаю приложение, распределение памяти, похоже, стабилизируется.

У меня нет объектов Zombie, и я не внес изменений в настройки проекта по умолчанию. Это должно быть ошибкой в ​​Xcode.

Смежные вопросы