1

这是问题:我正在编写一个显示一些图片的应用程序,带有树形图布局(例如,请参阅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}
}

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

感谢您的帮助,请随时询问更多信息。

4

2 回答 2

0

您是否尝试removeFromSuperview从滚动视图中删除图像视图

于 2013-04-30T07:27:05.667 回答
0

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

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

于 2013-04-30T08:36:57.613 回答