3

我发现这个模块很麻烦。我从 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

3 回答 3

2

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

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

于 2016-12-22T02:09:43.750 回答
1

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

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

...
于 2012-01-30T10:39:24.957 回答
1

我将此问题邮寄给 Apple,他们要求我在每次分配之间引入睡眠周期。在分配前添加睡眠。

于 2012-02-02T11:32:04.170 回答