Iphone保存全尺寸图像到文档目录挂起我的应用程序

时间:2013-03-06 06:58:48

标签: iphone memory-management document

我正在开发类似于iPhone中的照片应用的应用。流程是我通过UIImagePickerController获取图像。当我使用实际图像并进一步将该图像保存到文档时, 我的应用程序挂了。我在配置文件工具上看到分配达到19到20 mb。如果有任何解决方案。

  1. UIImagepicker控制器
  2. 获取图片
  3. 将其保存到文档中。

     -(NSString *)saveImageInDocumentsAtPath:(NSNumber *)number
    {
       NSString *fileName=[NSString stringWithFormat:@"image%@.png",number];
       NSString *imagePath= [[NSString alloc] initWithFormat:@"%@/%@",    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0],fileName];
       UIImage *image = self.selectedImage.image;
       NSData *imageData = UIImagePNGRepresentation(image);
       [imageData writeToFile:imagePath atomically:YES];
       return imagePath;
    }
    

2 个答案:

答案 0 :(得分:1)

如果我没有弄错(取决于iPhone及其相机),典型的图像将大约为3兆字节。所以从19岁到20岁并非不合理。为什么你从19岁开始是另一个问题。看看你是否加载了太多其他图像,大文件等。

如果使用AV Foundation而不是ImagePicker,则还有其他一些处理图像的选项。

您可以异步地将图像写入文件系统。

答案 1 :(得分:1)

这似乎是在代码中进行错误检查的绝佳机会。

为什么不尝试这个?

-(NSString *)saveImageInDocumentsAtPath:(NSNumber *)number
{
    NSString *fileName=[NSString stringWithFormat:@"image%@.png",number];
    NSArray * docDirectoryArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    if(docDirectoryArray)
    {
        NSString *imagePath= [[NSString alloc] initWithFormat:@"%@/%@",    [docDirectoryArray objectAtIndex:0],fileName];
        UIImage *image = self.selectedImage.image;
        if(image)
        {
            NSData *imageData = UIImagePNGRepresentation(image);
            if(imageData)
            {
                BOOL success = [imageData writeToFile:imagePath atomically:YES];
                if(success)
                {
                    // only return the image path in the success == YES case
                    return imagePath;
                } else {
                    NSLog( @"did not save file to %@", imagePath);
                }
            } else {
                NSLog( @"could not get image data out of the image");
            }
        } else {
            NSLog( @"no image selected");
        }
    }
    // you might want to check in the caller to make certain the imagePath is NULL
    return NULL;
}