iOS内存管理 - 增长ImageIO_PNG_Data和CoreAnimation的问题

时间:2014-04-06 02:43:38

标签: ios objective-c xcode memory-management allocation

我遇到了一个应用程序问题,每次推送到特定视图时内存都会继续增长。重新创建内存增加的过程是:

  1. 显示用户登录视图控制器
  2. 推送家庭视图控制器
  3. 推送设置视图控制器
  4. 记录用户输出(设置视图控制器中的按钮) - 弹出到用户登录视图控制器
  5. 登录并推送家庭视图控制器
  6. 每次我推到家庭视图控制器(即使我已经确认前一个被取消分配),内存会跳起6+ mb。我分析了应用程序,并看到了VM的一个明显问题:Allocations中的ImageIO_PNG_Data和VM:CoreAnimation类别。

    enter image description here

    其中一些发生在我使用的类Masking View中,它在该视图下方绘制一个图层的指定部分。用于绘制的代码如下:

    //Draw project image
    CGRect newRect = self.frame;
    if (useCustomFrame){
        newRect = customFrame;
    }
    
    CGImageRef image = CGImageCreateWithImageInRect([self.projectedImage CGImage], newRect);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, 0, rect.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, rect, image);
    
    // Release Context
    CGImageRelease(image);
    

1 个答案:

答案 0 :(得分:2)

大多数时候,记忆问题日益严重,原因有两种:

1.检查您在代码中使用的图像分辨率,仅使用所需的图像分辨率。

假设您使用40x40图像尺寸1X,80x80 2x等等。 然后只使用所需的分辨率。

  1. 检查您是否使用了更新的Lazy加载库。
  2. 使用内存分配工具并检查虚拟机分配,如果您有任何有关问题的IMAGEIO,那么您可能会在NSMainBundle中包含高分辨率图像。

    以所需分辨率调整高分辨率图像的大小,并使用imageWithContentsOfFile而不是imageName。