gpt4 book ai didi

ipad - CoreGraphics绘图在iOS 7上导致内存警告/崩溃

转载 作者:行者123 更新时间:2023-12-04 03:27:53 26 4
gpt4 key购买 nike

将我的iPad(迷你)更新为iOS7后,我发现绘图应用程序经过几次笔触后出现了滞后和崩溃的情况。

现在,当我在xcode 5中使用仪器/内存分配工具运行该应用程序时,我看到在屏幕上绘图时, VM:CG栅格数据类别正在迅速填充。似乎有许多 CGDataProviderCreateWithCopyOfData 调用,每个调用的大小为3.00Mb。连续绘制后,应用会收到内存警告,并且通常会终止。

该代码基本上将路径描画成一个图像上下文,或多或少是这样的:

UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

在iOS7/iPad上,这非常滞后并且存在内存问题,而在iOS6上,这是相当快的并且没有负内存占用。

当我在非视网膜iPhone版本中运行此代码时, CGDataProviderCreateWithCopyOfData 调用的大小为604Kb,并且同时只有一个或两个处于“事件”状态。绘图流畅,快速,没有内存警告,也没有运行速度减慢。

从iOS6到iOS7,CoreGraphics和图像上下文发生了什么?

很抱歉出现任何行话错误或其他可能的愚蠢错误。在我的业余时间进行iOS开发仍然是菜鸟。

最佳答案

我将绘图代码放在一个autoreleasepool中,这解决了我的问题。

例如:-

@autoreleasepool {
UIGraphicsBeginImageContext(self.view.frame.size);

[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());

drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}

关于ipad - CoreGraphics绘图在iOS 7上导致内存警告/崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167732/

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