Ios 大量图像的内存管理逻辑帮助?

Ios 大量图像的内存管理逻辑帮助?,ios,objective-c,Ios,Objective C,我现在需要一些逻辑方面的帮助(不是任何代码)。该应用程序的目标是根据级别编号显示2/3/4个不同的图像-所有图像都在同一视图中(因此图像将消失,新图像将显示在屏幕上)。将所有这些图像放在本地将对内存造成极大的损害。我想知道的是保持记忆的最好方法。我一直在阅读苹果公司关于“财产清单”和“归档”的文档,尽管我只了解了我所读内容的六分之一。我知道GCD、队列和线程,我不知道如何实现它们,或者它们是否是最好的方法——我只是知道它们 我想有所有的图像存储,加载了那些我需要的屏幕取决于级别号变量,然后卸载他

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

我想有所有的图像存储,加载了那些我需要的屏幕取决于级别号变量,然后卸载他们从屏幕上时,级别号变量增加1。将下一级图像加载到屏幕上后,预加载下一级图像并从内存中卸载屏幕上的当前图像可能会更快

如果这有任何意义的话,我真的希望如此

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

一些想法:

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

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

  • 映像内存管理和GCD/队列/线程之间的连接也很薄弱。是的,您可以使用异步后台操作,例如
    NSOperationQueue
    或Grand Central Dispatch的调度队列,例如,如果您希望在后台下载图像,则不会对用户界面产生不利影响。这更多的是用户体验问题,而不是内存管理问题。另一方面,您可能还希望研究使用已建立的第三方框架来简化此过程,例如优秀的通用框架或以图像为中心的框架。这将简化异步检索图像的过程


  • 事实上,我并不完全理解这个问题。你的图片有多大?为什么你不能在内存中加载这些图像?另外一个问题,这些图片来自哪里。好的,这个应用程序是一个文字游戏,有几百张图片,每个级别有2、3或4张图片。当级别编号增加时,屏幕上的图像会发生变化。有这么多的图像,如果它们都是本地的,游戏将是缓慢的,远远超过了常规应用程序的内存。我只是尝试从屏幕上加载和卸载图像,然后从内存中加载和卸载图像。我不知道存储大量图像并只在特定时间访问所需图像的最佳方法。我认为在您的情况下,最好的方法是将图像存储为应用程序的资源。您只需从文件系统中读取图像,并在需要时显示它。坏消息是,你的应用程序将增加大小(额外增加数MB)。