gpt4 book ai didi

iphone - 在循环中释放 renderInContext 结果

转载 作者:IT王子 更新时间:2023-10-28 23:37:07 27 4
gpt4 key购买 nike

我有一个在循环中调用的方法,看起来像这样:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImageView *background = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, PAGE_WIDTH, PAGE_HEIGHT)];
background.image = backgroundImg;

for (UIView *view in viewArray)
{
[background addSubview:view];
}

UIGraphicsBeginImageContext(background.frame.size);
[background.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

for (UIView *view in background.subviews)
[view removeFromSuperview];

background.image = nil;
[background release];
[image retain];
[pool drain];
[image autorelease];
return image;

但是,根据 Instruments Memory Monitor 的说法,内存使用量会不断上升,直到循环结束时才会下降。 (它崩溃了。)

如果我将 UIGraphicsBeginImageContext 替换为 UIGraphicsEndImageContext

UIImage *image = someotherimage;

然后内存不会激增,而是在循环的每次迭代中分配和减少,正如我所期望的,由于自动释放池。 (它不会崩溃)

如果我只是注释掉 renderInContext 行,它就可以正常工作。 (不会崩溃)

所以它看起来好像 renderInContext 以某种方式持有图像 - 我怎样才能让它释放它?或者请提供任何替代建议:)?

最佳答案

自然而然地,经过 3 天的试验,我在一小时内找到了答案(无论如何,我很乐意对此发表评论)。

我添加

background.layer.contents = nil;

之后

UIGraphicsEndImageContext();

并且层中的缓存内存是未缓存的:)。

关于iphone - 在循环中释放 renderInContext 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970627/

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