gpt4 book ai didi

iphone - UIGraphicsBeginImageContext 导致内存(泄漏)溢出

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:50 27 4
gpt4 key购买 nike

在我的代码中,我将图像的大小拉伸(stretch)到指定的大小。到目前为止,代码工作正常。我遇到的问题是“UIGraphicsBeginImageContext ()”没有释放新图像的内存。因此,大约 10 分钟后内存已满,应用程序被 IOS 终止。

有没有人能解决这个问题?

- (CCSprite *)createStretchedSignFromString:(NSString *)string withMaxSize:(CGSize)maxSize withImage:(UIImage *)signImage
{
// Create a new image that will be stretched with 10 px cap on each side
UIImage *stretchableSignImage = [signImage stretchableImageWithLeftCapWidth:10 topCapHeight:10];

// Set size for new image
CGSize newImageSize = CGSizeMake(260.f, 78.0f);

// Create new graphics context with size of the answer string and some cap
UIGraphicsBeginImageContext(newImageSize);

// Stretch image to the size of the answer string
[stretchableSignImage drawInRect:CGRectMake(0.0f, 0.0f, newImageSize.width, newImageSize.height)];

// Create new image from the context
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();

// End graphics context
UIGraphicsEndImageContext();

// Create new texture from the stretched
CCTexture2D *tex = [[CCTexture2D alloc] initWithImage:resizedImage];

CCSprite *spriteWithTex = [CCSprite spriteWithTexture:tex];

[[CCTextureCache sharedTextureCache] removeTexture:tex];

[tex release];

// Return new sprite for the sign with the texture
return spriteWithTex;
}

由这段代码调用:

// Create image from image path
UIImage *targetSignImage = [UIImage imageWithContentsOfFile:targetSignFileName];

// Create new sprite for the sign with the texture
CCSprite *plainSign = [self createStretchedSignFromString:answerString withMaxSize:CGSizeMake(260.0f, 78.0f) withImage:targetSignImage];

到目前为止谢谢你。

最佳答案

我找到了解决问题的方法。

首先,上面显示的代码是正确的,没有泄漏。

问题是由于删除了以 planSign 为子级的 sprite 引起的。 Sprite 由运行在不同线程上的计时器删除,因此在其他 NSAutoreleasePool 上运行。

[timerClass removeTarget:targetWithSign] 释放了一个空池。

[timerClass performSelectorOnMainThread:@selector(removeTarget:) withObject:targetWithSign waitUntilDone:NO]; 释放了正确的池,其中包含目标 Sprite 及其子 plainSign

感谢 SAKrisT 和 stigi 的建议。

关于iphone - UIGraphicsBeginImageContext 导致内存(泄漏)溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8786566/

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