iOS滚动时缓慢释放图像(无桌面视图)

时间:2013-04-30 06:52:19

标签: ios objective-c performance ipad memory-management

问题在于: 我正在编写一个应用程序,它显示一些带有树形图布局的图片(例如,请参阅https://raw.github.com/beckchr/ithaka-treemap/master/Core-API.png) 此布局显示在UIScrollView中。由于可以将许多图片添加到该滚动视图中,因此我想释放当前不在屏幕上的图片。我没有使用ARC。

在我看来,我知道应该发布哪些图片,以及如何在滚动时执行此操作(调用一些“卸载”方法)。这种方法毫无用处。问题在于,当图片被释放时,滚动会暂停一段时间(几毫秒,但这足以让人看起来很糟糕,使滚动类型“跳跃”并且缓慢,根本不平滑)。

我尝试过的(放入“卸载”方法的主体):

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}
}

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

感谢您的帮助,请随时向我们索取更多信息。

2 个答案:

答案 0 :(得分:0)

您是否尝试removeFromSuperview从scrollview

中删除了imageview

答案 1 :(得分:0)

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

我知道我的答案没有直接回答你的问题,但这是要走的路。否则你最终会耗尽内存。