释放ScrollView内存

时间:2012-09-11 22:22:11

标签: iphone ios ipad uiview uiscrollview

我有一个scrollview,我可以添加400个缩略图。我在仪器中对它进行了分析,并观察内存的实时字节大约达到70MB。然后我removefromsuperview所有这些和活字节保持不变。

需要恢复此内存。有什么诀窍?

感谢。

3 个答案:

答案 0 :(得分:0)

我认为这是一个类似的问题:Problem dealloc'ing memory used by UIImageViews with fairly large image in an UIScrollView

之前我遇到过类似的问题。根据这个问题的回答,一个解决方案似乎是在最终版本之前将UIImageView图像设置为nil:confusing memory allocation error on iPhone

答案 1 :(得分:0)

确保您还从数据源中删除UIImage实例。另外,考虑将UIImage放在NSCache中,在内存不足时清除它们,并使用UITableView而不是UIScrollView(重用界面元素)。

答案 2 :(得分:0)

要管理两件事 - 视图和图像。您只需要足够的滚动视图子视图来填充滚动视图的可见部分。这里很好的模式是有一个重用池。当您需要滚动视图的子视图时,请在重用池中检查一个子视图。如果那里没有,请分配一个。发生滚动时,将不再可见的视图放入重用池中,并在新可见空间中添加视图(首先检查重用池)。

图像可以放在由其网址和时间索引的缓存中。可变字典非常适​​合url索引。包含url的可变数组可以是时间索引的一个很好的FIFO队列。 url可以是应用程序中打包的图像的文件URL,也可以是下载图像时的远程URL。要添加到缓存,请将url-image对添加到字典中,然后将url添加到时间数组的前面(索引0)。

每次添加到缓存时,请检查其大小是否超出目标。如果确实删除了最旧的图像。为此,从数组中获取lastObject,从字典中删除该url键值对,并从数组中删除LastObject。

此图像缓存可以/应该大于滚动视图中可见视图的数量。您可以调整此大小以匹配所需的内存目标,同时考虑获取图像所需的时间(如果图像是远程的,您可能需要更大的缓存)。

将图像子视图添加到滚动视图时,为其指定默认图像。使用url查找检查缓存中的缓存图像。如果有,那么替换默认值。如果没有,请为该映像启动异步获取。当该图像到达时,将其添加到缓存并检查滚动视图以查看包含图像的子视图是否仍然可见(它可能已被滚动)。如果是,请设置图像。