图像阵列导致内存问题
Posted
技术标签:
【中文标题】图像阵列导致内存问题【英文标题】:Image Array Causing memory Issue 【发布时间】:2017-07-11 04:00:51 【问题描述】:目前正在创建一个基本的图像幻灯片应用程序,为此我创建了一个 UIImage 数组并使用以下代码调用它们。
let imageNames = (0...50).map
"\($0).JPG"
let image = UIImage(named: imageNames[0])
imageView.animationImages = image
imageView.animationDuration = 50
imageView.startAnimating()
想知道是否有人可以提供一些建议。
【问题讨论】:
为什么要输入 50 个数字?let images = (0...55).map UIImage(named: "\($0).JPG")!
你的图片是不是尺寸小但分辨率大?
【参考方案1】:
问题不在于图像在磁盘上占用了多少内存,而在于解决屏幕上所有像素所需的内存。在使用图像之前,您实际上并不需要存储它们。一张小于 1MB 的图片会很快加载。
相反,您只需要保留图像的路径,并且只有当您到达显示图像的代码时,才加载并显示它。
因此,结合 Alexander 和 KKRocks 的正确答案:
在你的类的顶部,定义你的文件名数组:
let imageNames = (0...55).map "\($0).JPG"
你在哪里展示你的图片:
if let image = UIImage(named: images[0])
... the code that is blowing up ...
如果您不确定如何保存和检索文件,请参阅我最近就该主题给出的答案:
Saving and Retrieving Files in User's Space.
【讨论】:
感谢 Mozahler 的回复,我尝试在其中添加代码,但出现错误:“无法将 'UIImage' 类型的值转换为预期的参数类型 'String' 一行: '让 image = UIImage(named:images[0]) 对不起,是我的错。我编辑了有问题的行。我将数组的名称从 image 更改为 imageNames,以明确它包含文件名。 感谢您的快速回复,不幸的是我仍然遇到同样的问题。目前代码如下: let imageNames = (0...50).map UIImage(named: "($0).JPG")! let image = UIImage(named: imageNames[0]) imageView.animationImages =图像 imageView.animationDuration = 50 imageView.startAnimating() 不,这是不对的。 map 语句不应该创建图像,它应该创建文件名。您想创建一个名称数组,并且仅在要显示图像时才创建图像。最好在添加代码时编辑问题。每个人都很难在 cmets 中阅读,他们甚至可能不会阅读 cmets。 感谢您的评论,现在将代码修改为原来的样子。但是仍然有错误:“无法分配'UIImage'类型的值?'输入“[UIImage]?”在 imageView.animationImages = images【参考方案2】:您需要在数组中添加图像名称而不是 UIImage 。
let images: [String] = [
"0.JPG",
"1.JPG")!]
从数组字符串中获取图片
let image = UIImage(named: images[0])
【讨论】:
以上是关于图像阵列导致内存问题的主要内容,如果未能解决你的问题,请参考以下文章