我有一个自定义视图,它使用以下方法绘制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];


使泄漏消失,但会导致窗口重绘和视觉伪影变慢。

我怎样才能解决这个问题?

最佳答案

不要轻蔑,但您在这里真的有问题吗?泄漏很明显,1,830万不是用于CG栅格数据的太多VM。如果您调整窗口的时间足够长,它将真的消耗所有可用内存吗?你是怎么表现出来的?

关于objective-c - CGContextDrawImage泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1734786/

10-15 16:03