首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确处理包含图像的UIImageView的UIPickerViewController中的内存警告?

如何正确处理包含图像的UIImageView的UIPickerViewController中的内存警告?
EN

Stack Overflow用户
提问于 2012-04-18 13:16:12
回答 2查看 417关注 0票数 1

所以我在一个视图上有一个UIImageView。视图上还有一个按钮,用于弹出UIPickerViewController或相机控件。当有人选择一个图像时,它会设置myImageView.image属性并在我的视图中显示该图像。未保存图像...这只是你所选择的东西的展示。

有时,当我在UIPickerViewController中时,我会收到一个内存警告。因为选取器是打开的,所以所有其他不可见的视图,包括我的UIImageView,都会被释放,并且在选取器关闭时再次调用viewDidLoad。这和预期的一样。但在此过程中,我丢失了我显示的图像,因为该图像恢复为其原始的“选择图像”图像占位符。

但是,如何将内存警告之前UIImageView中的图像重新加载到UIImageView中呢?因为它在内存中,所以现在已经丢失了。我不知道它的位置,因为用户从选取器中选择了它,而我只是用下面的代码直接从那里获取它:

代码语言:javascript
复制
itemImageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];

对如何恢复丢失的图像有什么想法吗?或者我是否应该将它保存在某个变量中,或者保存到设备中,以便在出现内存警告时再次使用??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-18 17:59:28

您需要保留对图像的引用,并将其显示在UIImageView中。例如,将其保存在一个名为selectedImage的属性中

.h:

代码语言:javascript
复制
@property (nonatomic, retain) UIImage* selectedImage;

图像选择器委派:

代码语言:javascript
复制
self.selectedImage = [info objectForKey:UIImagePickerControllerOriginalImage];
itemImageView.image = selectedImage;

然后,当由于内存不足而卸载itemImageView (以及视图的其余部分)时,您仍将保留图像。在viewDidLoad中,检查是否有应该显示的图像:

代码语言:javascript
复制
if (selectedImage != nil)
    itemImageView.image = selectedImage;

确保在适合您的应用程序的时候释放selectedImage -例如,当用户超出此屏幕时,或者当他们取消选择此图像时,或者当您将其保存到文件系统时等。

票数 1
EN

Stack Overflow用户

发布于 2012-04-18 13:36:34

是的,如果你有一个用于图像的变量并保留图像,那会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10203211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档