使用UIImagePNGRrepresentation时出现内存问题



我发现这个模块很麻烦。我从Photolibrary导入了100多个图像,并用不同的名称将它们保存在文档目录中。不出所料,我在这个不寻常的地方出现了记忆力问题。UIImagePNGRepresenation似乎正在缓存文件。因此,当我对300+个图像运行下面的过程时;总字节数";在3.00 GB的范围内,并且由于内存而崩溃(在分配工具中测试)。我已经粘贴了下面的代码。这个代码有其他选择吗

-(void)something
{
   NSData *data=nil;
   for (int i=0; i<numberOfImages; i++) {
    
    @autoreleasepool {
        
        UIImage *image=[UIImage imageNamed:[NSString stringWithFormat:@"image%d.png",i]];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        
        NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingString:@"directoryname"];
        
        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"image%d.png",i]];
        
        //convert image into .png format
        data=UIImagePNGRepresentation(image);
        [data writeToURL:[NSURL URLWithString:fullPath] atomically:NO];
      }
   }
   data=nil;
}

我通过发送4通道图像(RGBA或RGBX)而不是3通道图像(RGB)来解决此问题。

您可以检查是否有机会更改图像的参数。

缓存来自[UIImage imageNamed:],而不是UIImagePNGRepresentation()。改为:

NSString *imageName = [NSString stringWithFormat:@"image%d.png", i];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
...

我把这个问题寄给了苹果公司,他们要求我在每次分配之间引入睡眠周期。在分配之前添加睡眠。

相关内容

  • 没有找到相关文章

最新更新