我正在开发类似于iPhone中的照片应用的应用。流程是我通过UIImagePickerController
获取图像。当我使用实际图像并进一步将该图像保存到文档时,
我的应用程序挂了。我在配置文件工具上看到分配达到19到20 mb。如果有任何解决方案。
UIImagepicker
控制器将其保存到文档中。
-(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;
}
答案 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;
}