【问题标题】:Does iOS use some mechanism for caching/restoring UIImageView objects?iOS 是否使用某种机制来缓存/恢复 UIImageView 对象?
【发布时间】:2011-10-19 01:08:59
【问题描述】:

我使用了很多放置在 UIImageView 对象中的小图像。目前,我正在尝试预测以后可能出现的问题,例如内存警告、留在后台等。我的应用程序很小 - 不到 10Mb,但我还是有点担心。原因是我不确定我的应用程序将如何应对屏幕上加载大量 UIImageViews 的情况,然后应用程序进入后台,然后在很长一段时间后返回。我必须重新加载所有屏幕上的 UIImageViews 吗?

我了解到 iOS 在后台处理时会自行处理 UIKit 数据(例如图像视图)。而且我不需要担心恢复它。如果我的 UIImageView 对象可以直接从 app 目录使用 PNG 图像文件,那就没问题了。但问题是我正在使用 spritesheets(其中包含多个图像的文件),然后使用 CGImageCreateWithImageInRect 提取这些图像,然后在某个时间点传递给 UIImageView。现在,我在问自己,iOS 会缓存我在屏幕上的 UIImageView 对象,还是我必须在应用程序激活时手动重新加载这些 UIImageView?我知道如果很多应用程序将在后台运行,那么我的后台应用程序可能会被杀死。但是我担心我的应用程序仍然存在(在后台)但释放 UIImageView 对象的情况......请分享你的知识和见解:)

【问题讨论】:

    标签: objective-c memory uikit background uiimageview


    【解决方案1】:

    “后台”应用的当前实现会对您的应用内存进行完整的快照。这种方法保证了应用程序将在完全从未更改状态的内存中杀死后恢复。这意味着您不需要进行任何额外的操作,例如保存代码生成的图像等来支持应用程序的恢复。如果您不为 UIApplicationDelegate 实例在 applicationDidReceiveMemoryWarning 内部实现清理逻辑,则 UIImageView 将不会自动卸载。然而,为通过 imageNamed 方法加载的缓存 UIImages 实现了自动清理逻辑。

    【讨论】:

    • 谢谢。关于在使用 UIKit 对象时是否安全的另一种观点 :) 我不确定您所说的“但是通过 imageNamed 方法加载缓存的 UIImages 实现的自动清理逻辑”是什么意思。你能澄清一下吗?
    • 这些都不是真的。当后台应用程序被操作系统杀死时,它不会保留它们的数据,并且再次打开它们不会恢复上一个会话中的任何数据,除非您自己保存了它。
    猜你喜欢
    • 2018-06-02
    • 2020-02-08
    • 2012-01-06
    • 2015-12-16
    • 2016-10-14
    • 2020-07-21
    • 2010-10-05
    • 2023-03-08
    • 2018-10-12
    相关资源
    最近更新 更多