我有一个自定义视图,它使用以下方法绘制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];使泄漏消失,但导致较慢的窗口重绘和视觉伪影。
我怎么才能解决这个问题?
发布于 2009-11-14 18:49:50
不要轻蔑,但你真的有问题吗?泄漏是很清楚的,对于CG光栅数据来说,1830万不是很大的VM。如果您调整窗口的大小足够长,它真的会消耗所有可用内存吗?你怎么展示这个的?
发布于 2009-12-07 04:09:47
这看起来不像是泄漏,您可能只是在增加缓存的大小。您说它的峰值是50 may,并且似乎认为它将是每个文档的50 may,但是它可能只是每个进程50 may。
https://stackoverflow.com/questions/1734786
复制相似问题