使用UIImageJPEGRepresentation加载和保存大图像会导致我的应用崩溃

时间:2013-03-04 07:53:34

标签: ios objective-c cocoa-touch cocoa uiimagepickercontroller

我的应用可以拍照或从相机胶卷中选择它们,使用UIImagePicker我将照片发送到ViewController,然后用户可以裁剪图像。

最终结果是UITableView,其中包含名称和缩略图,每行都会显示完整尺寸的图片。缩略图是不同比例的原始图片。

这是我在裁剪后保存照片的方式:

[UIImageJPEGRepresentation(_justNowImage.image, 0.1) writeToFile:jpgPath atomically:NO];

这是我打开缩略图或全尺寸的方式。

_imageInPocket.image = [UIImage imageWithContentsOfFile:jpgPath];

如果我裁剪小图片一切正常,但我尝试裁剪大图(超过2 MB)应用程序将崩溃,可能是因为内存不足。

我的项目正在使用ARC。我还需要以某种方式从内存中释放图像吗? 我应该创建小版本的图像并将其用作缩略图而不是加载UITableView中的所有原始图片并更改其比例以适合Cell吗?

1 个答案:

答案 0 :(得分:1)

也许您应该加载数据并使用

将其转换为图像
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSURL *url = [NSURL URLWithString:@"Your URL"];
NSURLRequest *theRequest = [NSURLRequest
    requestWithURL: url
    cachePolicy: NSURLRequestUseProtocolCachePolicy
    timeoutInterval: 60.0
];

使用此方法时,您将获得数据包中的图像。 在此之后你应该调用并收集所有数据包

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
 [imageData appendData:data];
}

在此之后,您需要将数据转换为图像并关闭连接

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  UIImage *image = [UIImage imageWithData:imageData];
  imageView.image = image;
  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}