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

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

>显示用户登录视图控制器
>推回家视图控制器
>按设置视图控制器
>记录用户输出(设置视图控制器中的按钮) – 弹出到用户登录视图控制器
>登录和推送家庭视图控制器

每次我推到家庭视图控制器(即使我已经确认前一个被取消分配),内存会跳跃6 mb.我分析了应用程序并看到了VM的一个明显问题:Allocations中的ImageIO_PNG_Data和VM:CoreAnimation类别.

其中一些发生在我使用的一个名为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.检查您在代码中使用的图像分辨率,仅使用所需的图像分辨率.

假设您使用40×40图像尺寸1X,80×80 2x等等.
然后只使用所需的分辨率而不是更多.

>检查您是否使用更新的Lazy加载库.

使用内存分配工具并检查虚拟机分配,如果您有任何关于问题的IMAGEIO,那么您肯定在NSMainBundle中包含了高分辨率图像.

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

点赞