我在UIImage
上画线,我的图片在UIImageView
。第一次绘制过程很顺利,我将新图像分配给UIImageView
但是当我重复这个过程时,它会给我内存警告和应用程序崩溃:
终止以响应篮板的终止。
我已经分析了我的应用程序,CG栅格数据占用了273 MB,总体上是341 MB Live Bytes。还在自动释放池中包含代码,但没有取得成功。我的代码
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;
答案 0 :(得分:0)
所以我刚刚发现了一个类似的问题。我正在为图像视图指定一个图像,其中图像本身先前被其他对象保留,正在处理等等......结果是图像视图确实以某种方式泄露了这些图像的每个人。
我使用的解决方案是在将图像分配给图像视图之前,在CGImage
的级别上创建图像的副本。我想这些位图一定存在问题。无论如何尝试创建这样的副本:
CGImageRef cgCopy = CGImageCreateCopy(originalImage.CGImage);
UIImage *copiedImage = [[UIImage alloc] initWithCGImage:cgCopy scale:originalImage.scale orientation:originalImage.imageOrientation];
CGImageRelease(cgCopy);
imageView.image = copiedImage;
答案 1 :(得分:-2)
iOS设备中使用的最大分辨率为1024x1024。我们不能使用超过那个大小。为各自的设备尺寸使用2x和3x图像。