У меня есть пользовательский вид, который рисует CGImage, используя:
- (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];
устраняет утечку, но приводит к более медленной перерисовке окна и визуальным артефактам.
Как я могу это исправить?