【问题标题】:VM: CG raster Data memory keep growingVM:CG 光栅数据内存不断增长
【发布时间】:2015-02-23 04:34:11
【问题描述】:

所以我正在尝试制作一个可以让用户更改 UIImage 的颜色的应用程序,因为我正在使用我发现的这个功能

 - (UIImage *)imageWithTintColor:(UIColor *)color fraction:(CGFloat)fraction
{
    if (color)
    {
        UIImage *image;
        if ([UIScreen instancesRespondToSelector:@selector(scale)])
        {
            UIGraphicsBeginImageContextWithOptions([self size], NO, 0.f);
        }
        else
       {
           UIGraphicsBeginImageContext([self size]);
       }

       CGRect rect = CGRectZero;
       rect.size = [self size];
       [color set];
       UIRectFill(rect);

       [self drawInRect:rect blendMode:kCGBlendModeDestinationIn alpha:1.0];

       if (fraction > 0.0)
       {
           [self drawInRect:rect blendMode:kCGBlendModeSourceAtop alpha:fraction];
       }
       image = UIGraphicsGetImageFromCurrentImageContext();
       UIGraphicsEndImageContext();
       return image;
   }
   return self;
}

一切正常,但 CG 栅格数据在内存中增长

【问题讨论】:

  • 图片大小是多少?
  • 大约 200-300kb,我看到那些 200、300 kb...但最后 BAAM 30MB
  • 图片的尺寸是多少? 3000x2000 像素?我还假设这是在 iPad 模拟器上?
  • 图像是 1240x1240,是的,它是 iPad,但我可以向您展示 iPhone 的规格,仍然没有变化,我听说过有关放置 @autoreleasepool 的信息,但对我不起作用...或者我不确定在哪里设置它
  • 问题可能出在其他方面:UIImageView 占用大量内存在 iPad 大屏幕上显示大图像

标签: ios xcode memory-management core-graphics


【解决方案1】:

我发现了问题,这是我的错误逻辑,我使用 2 个视图,一个用于显示,一个用于处理 ex:调整大小、移动、旋转。每次我将Subview 添加到其中一个只需要一次只保存1个的地方,一个简单的:

  for (UIView *view in 2cndView.subviews)
  {
    [view removeFromSuperview];
  }

为我做了诀窍

【讨论】:

    【解决方案2】:

    我一直在使用我的应用程序,它突然无法正常启动,一段时间了。事实证明,当我在图片资源文件中将一些图片的Render as 切换为Template 时,会导致应用程序完全崩溃。 CG Raster Data 呈指数级增长,最终导致应用停止,Xcode 刚刚说

    与 iPhone 的连接丢失.. 检查连接等

    似乎在每次启动期间,图像都会针对此“模板”设置进行重新处理,这消耗了大量的 RAM,实际上导致它无法启动。为了解决这个问题,我降低了图像的分辨率——就这么简单。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2016-02-24
      • 1970-01-01
      • 2013-01-09
      • 2017-11-09
      • 2018-09-17
      • 1970-01-01
      • 2015-08-07
      • 2013-10-08
      相关资源
      最近更新 更多