【发布时间】:2012-01-31 11:13:18
【问题描述】:
UIImageView 不在视图中时会自动释放图像资源吗?也许当应用程序收到内存警告时?
如果没有,我正在考虑编写一个这样做的子类(例如SmartReleaseImageView),以便在有益的特定情况下使用。我在考虑这些方面的行为:
- 当
SmartReleaseImageView收到setImage消息时,它会向管理器注册自己,例如SmartReleaseImageViewManager。 - 当应用程序收到内存警告时,
SmartReleaseImageViewManager循环遍历其所有SmartReleaseImageViews并检查它们中的任何一个是否没有添加到超级视图中,或者检查它们中的任何一个是否有一个由于在外面而被剔除的框架主窗口的边界。 - 当
SmartReleaseImageView检测到它已进入视野并被释放时,它会再次加载图像。所以也许,它首先需要有一个像setImageURL这样的方法,而不是setImage。
这种行为是否已经内置在UIImageView 中?或者它是否存在于任何地方的第 3 方版本中?还是想法有问题?
(我正在编写一个 UIImageView-heavy 应用程序,如果有一个全局性的包罗万象的解决方案可以帮助解决内存问题,而不是在我的UIViewControllers 中添加大量额外代码,那就太好了。)
编辑:到目前为止的答案表明UIViewController 应该负责。这是真的,我想我的特殊情况是非典型的。在我的例子中,UIViewController 可以包含许多自定义视图(具有自己的层次结构),它不一定知道其结构,并且经常进出视图。因此,它很难知道何时释放其资源。但是,是的,也许我应该找到一种方法来解决问题本身......
【问题讨论】:
-
这听起来有点像您从错误的角度解决问题。 UIViewController 通常会在内存紧张时立即卸载其视图 - 对我来说,似乎您应该简单地依赖这些机制。
标签: ios memory-management uiimageview