1

所以我有UIImageView一个看法。该视图上还有一个按钮来弹出一个UIPickerViewController或相机控件。当有人选择图像时,它会设置myImageView.image属性并在我的视图中显示图像。没有保存图像......它只是显示您选择的内容。

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

但是如何UIImageView将内存警告之前的图像加载回UIImageView?因为它在记忆中,它现在已经丢失了。而且我不知道它的位置,因为用户从选择器中选择了它,而我只是直接从那里拿走了它:

itemImageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];

关于如何恢复丢失的图像的任何想法?或者如果我应该将它保存在某个变量中或保存到设备中以便在出现内存警告的情况下再次使用?

4

2 回答 2

1

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

。H:

@property (nonatomic, retain) UIImage* selectedImage;

图像选择器委托:

self.selectedImage = [info objectForKey:UIImagePickerControllerOriginalImage];
itemImageView.image = selectedImage;

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

if (selectedImage != nil)
    itemImageView.image = selectedImage;

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

于 2012-04-18T09:59:27.730 回答
0

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

于 2012-04-18T05:36:33.887 回答