ios - UIImageView 没有正确释放图像数据?

标签 ios memory ios5 uiimageview uiimage

在最简单的形式中,我的应用程序显示 10 个 UIImageView,每个包含一个图像。即使所有 UIImageView 都包含图像,我的应用程序也使用足够小的内存占用。但是,有一个按钮可以通过将所有图像设置为 nil 来清除所有 UIImageView。问题是,在 Instruments 中检查内存监视器时,UIImageViews 持有的内存不会消失。这不会出现在分配工具中,确认剩余的内存占用不是对象,而是基于图形的内存。如果我将图像调整为更小或更大的大小,则剩余内存也会分别变小或变大。

为什么在 UIImageView 的图像设置为 nil 后图像数据仍然存在?

最佳答案

我相信 UIKit 保留图像缓存以供重用。 UIImageView 可能会释放该对象,但出于性能原因会保留一个副本。

不过,这些图像应该在收到内存警告时发布。如果不是,我会检查两个地方:

  1. 确保 UIImageView 正在被释放。使用 Allocations Instrument 来分析您的应用程序,并在程序中做任何您需要做的事情来加载这些图像。然后卸载图像并搜索 UIImageView。只要您确定您的程序应该已经发布了所有这些,如果您在搜索中找到任何内容,您就知道出了点问题。
  2. 我还会检查创建图像的所有位置,例如:UIImage = [UIImage imageName:@"Foo.jpg"]; 确保这些位置也已发布。您可以使用分配来查找 UIImage 类,但要清除那些应该/不应该存在的类会更难。
  3. 运行静态分析器:在 Xcode 4 中,它位于 Products -> Analyze 下。这是查找逻辑错误、过度/不足发布(如果您不使用 ARC)等的好工具。

关于ios - UIImageView 没有正确释放图像数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8864302/

相关文章:

c++ - 是什么让一种语言不愿意/不能包含 RAII?

objective-c - 在 View Controller 之间拖放(包含在同一 View Controller 中)

ios - 没有这样的文件或目录,但文件存在 Xcode

ios - 如何从 Struct Swift 中显示一个字符串

php - 如何确定变量的内存占用(大小)?

iphone - 从AddressBook iPhone获取Notes时应用程序崩溃

iphone - performSegueWithIdentifier 和 sharedData

ios - railscasts.com 之类的 iOS 5 编程站点

ios - 试图获得一个按钮来打开 ios 上的日历。单击按钮时没有任何反应

iOS 文件模式 : The `source_files` pattern did not match any file