【问题标题】: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")! }
  • 你的图片是不是尺寸小但分辨率大?

标签: ios arrays swift uiimage tvos


【解决方案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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2023-04-10
    • 2020-11-18
    • 2023-03-09
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多