gpt4 book ai didi

objective-c - CGContextDrawImage 泄漏

转载 作者:行者123 更新时间:2023-12-03 16:45:01 27 4
gpt4 key购买 nike

我有一个自定义 View ,它使用以下方法绘制 CGImage:

- (void) drawImage
{
CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
CGRect imageRect = {{0,0}, {CGImageGetWidth(image), CGImageGetHeight(image)}};
CGContextDrawImage(context, imageRect, image);
}

看起来,当调整 View 大小时(因此重复调用drawImage),进程使用的内存会稳步增加。leaks表示没有泄漏。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];

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

我该如何解决这个问题?

最佳答案

这看起来不像是泄漏,您可能只是增加了缓存的大小。您说峰值为 50Mb,并且似乎认为每个文档将是 50Mb,但实际上可能只是每个进程 50Mb。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com