gpt4 book ai didi

ios - 在应用程序中本地存储大量图像的正确方法

转载 作者:行者123 更新时间:2023-11-28 14:22:05 25 4
gpt4 key购买 nike

我正在尝试找出在设备上本地存储大量图像并在需要时在屏幕上显示它们的最方便和正确的方法。

到目前为止,我所有的图像和图标都放在 Assets 文件夹中,我还创建了一个单独的 swift 文件,我在其中创建了数组以根据图像类型将它们分配到适当的数组中。大约30个阵列。如下所示:

let instrumentImages = [UIImage(named: "accordion")!, UIImage(named: "drums")!, UIImage(named: "electricGuitar")!, UIImage(named: "flute")!, UIImage(named: "harp")!, UIImage(named: "maracas")!, UIImage(named: "piano")!, UIImage(named: "guitar")!, UIImage(named: "saxophone")!, UIImage(named: "trumpet")!, UIImage(named: "violin")!, UIImage(named: "tuba")!]

选择图像图标时,我将实际图像传递给详细信息 Controller ,其中图像在屏幕上显示的图像如下:

let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let destVC = mainStoryboard.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
destVC.image = ImageModel().instrumentImages[indexPath.row]

self.navigationController?.pushViewController(destVC, animated: true)

一切都非常简单并且运行完美,但是一旦我有大量图像,就像我说的 100+ 应用程序开始运行非常慢。

所以我的问题是,在我的情况下,存储如此大量的图像并在需要时在屏幕上显示它们的最佳方式是什么,以便我的应用顺利运行。

最佳答案

我会说问题出在这里:

destVC.image = ImageModel().instrumentImages[indexPath.row]

每次您想要加载单个图像时,您都会创建一个 ImageModel 实例,它(我假设)会加载所有图像,并只返回一个,即您需要的那个。这是非常低效的,没有必要加载所有图像,只获取一个图像,然后丢弃所有其他图像。

如果您坚持要预加载图像,只需加载一次并将它们存储在 ImageModel 的静态实例中,就像这样

class ImageModel
{
static let sharedInstance = ImageModel()

init()
{
// load images here
}
}

然后像这样检索图像

destVC.image = ImageModel.sharedInstance.instrumentImages[indexPath.row]

这样,您将在共享 ImageModel 实例的构造函数中仅加载一次所有图像。

但是,我认为将所有图像加载到内存中没有意义 - 在您的 ImageModel 类中,您应该只保留图像的文件名,然后加载他们只在必要时

class ImageModel 
{
let instrumentImages = ["accordion", "drums", ... ]

static let imageWithIndex(_ index : Int) -> UIImage?
{
return UIImage(named: instrumentImages[index])
}
}

然后这样调用它

destVC.image = ImageModel.imageWithIndex(indexPath.row)

没有必要预加载您可能最终甚至不会使用的图像,因为如果有大量高清图像,您的应用甚至可能会耗尽内存。

关于ios - 在应用程序中本地存储大量图像的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51840569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com