【发布时间】:2024-01-08 19:05:01
【问题描述】:
我在UIImage 上画线,我的图像在UIImageView 中。第一次绘图过程顺利,我将新图像分配给UIImageView,但是当我重复该过程时,它会给我内存警告和应用程序崩溃:
响应篮板的终止而终止。
我分析了我的应用程序,CG 栅格数据占用了 273 MB,总共占用了 341 MB 实时字节。还将代码包装在自动释放池中,但没有成功。我的代码
UIGraphicsBeginImageContext(imageView.image.size);
[imageView.image drawAtPoint:CGPointMake(0, 0)];
context2=UIGraphicsGetCurrentContext();
for(int i=0; i<kmtaObject.iTotalSize; i++)
{
kmtaGroup=&kmtaObject.KMTA_GROUP_OBJ[i];
//NSLog(@"Group # = %d",i);
for (int j=0; j<kmtaGroup->TotalLines; j++)
{
lineObject=&kmtaGroup->Line_INFO_OBJ[j];
// NSLog(@"Line # = %d",j);
// NSLog(@"*****************");
x0 = lineObject->x0;
y0= lineObject->y0;
x1= lineObject->x1;
y1= lineObject->y1;
color= lineObject->Color;
lineWidth= lineObject->LinkWidth;
lineColor=[self add_colorWithRGBAHexValue:color];
linearColor=lineColor;
// Brush width
CGContextSetLineWidth(context2, lineWidth);
// Line Color
CGContextSetStrokeColorWithColor(context2,[linearColor CGColor]);
CGContextMoveToPoint(context2, x0, y0);
CGContextAddLineToPoint(context2, x1, y1);
CGContextStrokePath(context2);
}
}
newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image=newImage;
【问题讨论】:
-
在制作动画时您是否正在加载任何图像?
-
@VineeshTP 是的,我正在加载高分辨率图像......我的循环绘制了图像上的所有线条。图像分辨率为 7000X4000。当循环结束时,我将图像分配给 UIImageView。
-
@VineeshTP 但在我的情况下,我不能妥协图像大小.. 还有什么解决方案?
-
我认为您发布的代码没有任何问题。您能否通过注释掉您发布的最后一行(将图像分配给图像视图)来检查图像是否是对此负责的人。您将看不到结果,但执行将完全相同,因此请检查它是否仍然泄漏内存。
-
你是对的。您可以或多或少地复制您的代码并将其放入另一个视图的 drawRect 方法(您覆盖它)。您需要添加的是绘制一个填充颜色设置为清除颜色的全屏矩形。还要删除所有与图像相关的代码。然后需要将此视图添加到您的图像视图(或滚动视图)中。此外,在每次更改线条后,您都需要在绘制线条的视图上调用 setNeedsDisplay。
标签: ios objective-c ipad uiimageview uiimage