0

我正在寻求一些关于逻辑的帮助(不是任何代码)。该应用程序的目的是根据级别编号显示 2/3/4 个不同的图像 - 都在同一个视图中(因此图像消失并且新图像被放置在屏幕上)。在本地拥有所有这些图像将对记忆造成极大损害。我想知道的是保持记忆的最好方法。我一直在阅读有关“属性列表”和“存档”的 Apple 文档,尽管我只了解所读内容的六分之一。我知道 GCD、队列和线程,我不知道如何实现它们,或者它们是否是最好的方法——我实际上只知道它们。

我想存储所有图像,根据级别编号变量将我需要的图像加载到屏幕上,然后在级别编号变量增加一时从屏幕上卸载它们。一旦下一级图像加载到屏幕上,预加载下一级图像并从内存中卸载屏幕上的当前图像可能会更快。

如果这有任何意义,我真的希望它有意义。

提前感谢您的时间和任何帮助:)。

4

1 回答 1

2

几个想法:

  1. “减少内存”的最佳方法是确保您不保留对UIImage不立即需要的对象的强引用。这有时称为延迟加载(仅UIImage“即时”创建对象)。因此,即使您的应用程序最终可能会使用许多图像,也只需为当前用户界面立即需要的图像填充UIImageView对象(及其相关属性)。image同样,确保发布对不再需要的图像的强引用。

  2. 图像内存管理与属性列表和存档之间的联系很薄。如果您想询问如何存储图像,它们要么作为应用程序包的一部分随您的应用程序一起交付,要么您从网络中检索它们。在后一种情况下,您可以将这些下载的图像缓存在应用程序的本地文件系统中(DocumentsLibrary文件夹),并且您可以在应用程序的模型中跟踪它们,您可以使用属性列表(plist)或核心数据(或其他形式的持久存储)将其保存到持久存储中。通常不建议尝试将缓存的图像本身存储在这些类型的持久存储中。出于性能原因,除非图像很小,否则最好将文件保存在本地文件系统中,并将对这些文件名的引用保存在持久存储中。

  3. 图像内存管理和 GCD/队列/线程之间的联系也很薄。是的,您使用并发技术,例如NSOperationQueueGrand Central Dispatch 的调度队列,用于异步后台操作,例如,如果您想在后台下载图像,以免对用户界面产生不利影响。这更像是一个 UX 问题,而不是内存管理问题。顺便说一句,您可能还想研究使用已建立的第三方框架来简化此过程,例如出色的通用AFNetworking或以图像为中心的SDWebImage。这些将简化对图像进行异步检索的过程。

于 2013-03-14T16:18:47.440 回答