У меня есть настраиваемое представление, что рисует CGImage с помощью:CGContextDrawImage утечка
- (void) drawImage
{
CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
CGRect imageRect = {{0,0}, {CGImageGetWidth(image), CGImageGetHeight(image)}};
CGContextDrawImage(context, imageRect, image);
}
Похоже, памяти, используемой в процессе неуклонно увеличивается при изменении размеров вида (и, таким образом, неоднократно вызывая DrawImage). утечки показывает отсутствие утечки. vmmap показывает действительно увеличение памяти, но в области, которая находится вне прямого управления моим приложением, то есть CG растровые данные.
REGION TYPE [ VIRTUAL after open] [VIRTUAL after X resizes]
=========== [ =======]
ATS (font support) [ 31.7M] [ 31.7M]
CG backing stores [ 2448K] [ 5400K]
CG image [ 12K] [ 12K]
CG raster data [ 872K] [ 18.3M] <-- memory increase
Замена
CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
с
CGContextRef context = (CGContextRef)[[NSGraphicsContext graphicsContextWithWindow:[self window]] graphicsPort];
делает утечку уйти, но приводит к замедлению окна перерисовывает и визуальные артефакты.
Как это исправить?
Он достигает максимума около 50 МБ, а затем он падает. При использовании многодокументного приложения добавляется 50 Мб на документ. При использовании графического контекста окна растровые данные никогда не превышают 128K. – diciu
Я не могу воссоздать его на 10.6.2. Вы должны добавить некоторую информацию о версии osx к своему сообщению - может кому-то помочь. – 2009-11-15 10:29:01