应用程序因iPad 3上的内存警告而崩溃

时间:2015-02-02 06:15:04

标签: ios objective-c ipad uiimageview uiimage

我在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;

2 个答案:

答案 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图像。