2013-04-30 37 views
1

这是问题所在: 我写这显示一些图片,有树图布局应用程序(用于示例,请参见https://raw.github.com/beckchr/ithaka-treemap/master/Core-API.png) 这种布局显示在一个UIScrollView 。由于许多图片可以添加到该滚动视图,我想释放当前不在屏幕上的图片。我没有使用ARC。的iOS缓慢释放图像滚动时(无实现代码如下)

在我看来,我知道我应该发布哪些图片,以及如何在滚动时调用它(调用一些“卸载”方法)。这种方法没有任何用处。问题是,当图片被释放时,滚动停止片刻(几毫秒,但这足以造成不好看,使得滚动类型“跳跃”而缓慢,根本不流畅)。

我已经试过(把我的“卸载”方法体):

imageview.image = nil 
performSelectorInBackground:@selector(effectiveUnload) withObject:nil 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0,^(void){ 
dispatch_sync(dispatch_get_main_queue(), ^(void){ 
imageview.image=nil} 
} 

我觉得这个问题很奇怪,因为有是绝对内存分配没有减速效果,但只内存释放。

感谢您的帮助,请不要犹豫,以获取更多信息。

+0

有什么原因你不使用UITableView? – Fogmeister 2013-04-30 07:36:52

+0

主要原因是树形图显示。我的图片有一些图案,可以更改(不会显示稳定布局的列表) – 2013-04-30 07:57:36

回答

0

,您是否试图removeFromSuperview从滚动型

+0

不,我没有。我想让UIImageView到位,以便在需要时快速重新加载UIImage。我将尝试删除UIImageView,并在需要时再次添加它。感谢这个想法。 – 2013-04-30 07:55:22

+0

那么,这是完全一样的问题。当我'removeFromSuperview'(和'self.imageView = nil',因为我确实保留它作为一个属性),滚动仍然停止了一下。 – 2013-04-30 12:50:25

0

删除ImageView的不添加越来越多的UIImageViews - 回收他们! 为了尽可能节省内存,您应该遵循UITableView回收视图的方式: 1.视图离开可见区域后,将其添加到“视图池”(并将其从超级视图中移除)。它不是一个膨胀的操作!) 2.当新视图变为可见时,首先检查池中是否有视图。如果不是,则创建一个新视图。

我知道我的回答并不直接回答你的问题,但这是要走的路。否则,最终会导致内存不足。

+0

我认为这是一个好主意,即使它不回答这个问题。 UIImageView的数量可以很高,但不是无限的。只要我的图像浏览不显示为空,我认为我的内存不会用完。问题在于它可能对我的代码有很深的影响,所以如果我没有其他选择,我会这样做。另外,还会有图像发布,这是问题的问题。 – 2013-04-30 08:49:36

+0

如果您将图像发布注释掉,它的运行速度是否更快? – 2013-04-30 08:55:17

+0

是的,如果我评论imageview.image = nil,这是绝对没有问题的,滚动是完美的,即使我重新加载已加载的图像。问题真的来自释放。 – 2013-04-30 09:15:52