我有一个显示大量的图片在细胞UITableView,我不会退出感到高兴的滚动性能。我UITableView是像iPhone上的照片应用程序。有谁知道为什么iPhone照片应用程序滚动,以便该死的快,就好像他们什么在屏幕上。

和没有任何人有一些提示/技巧来提高我的性能/滚动速度?

有帮助吗?

解决方案

您应该预先缓存您的图片,并没有做到这一点懒洋洋地。当您滚动您的表的 UITableViewDataSource:的cellForRowAtIndexPath:方法被调用,如果您加载有你的图片,然后你会看到它要求你的内容为您的滚动,在你的应用程序中创建的延迟。尝试将让你的cellForRowAtIndexPath:是这样的:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );

您将看到你花多长时间让每个细胞。

要解决这个问题,你可以像你需要复杂 - 如果你有一个的很多的图片,你将有越来越多的聪明。你可以做分页加载,在那里你跟踪的最后一个单元格要求的NSIndexPath,并确定如果滚动正在上升或下降并使用的 + NSImage中:imageNamed:获取一次图像的一些页面价值前(即5张着您的当前位置),或任何作品为你(服用的事实,人们必须向下返回他们的手指表中的底部再刷卡,所以表元素的消费优势有停顿 - 你可以让你的页面尺寸大到足以填满一个刷卡)。这可能仍然不是很大,但是,因为你只可以同时承受着所有的冲击,而不是一个非常敏感的负载对每一个细胞。

您可以控制返回给UI迅速让系统计划使用的 NSRunLoop:performSelector:目标:参数:顺序:模式: 的关闭使用NSImage中的主要runloop:当如果你够取遥遥领先,它会提供给显示请求单元imageNamed :,然后

您必须痛苦地意识到内存的关注,虽然。如果你发现这是一个问题,使用的 NSImage中:initWithContentsOfFile:时,这将在内存不足的情况清理图像缓存。根据由缓存失效算法所使用的策略,你清除缓存和重新加载您无效的预取这些情况可能会导致“口吃”。

其他提示

大滚动性能结果已报告通过子类的UITableViewCell并直接绘制每个单元格的内容。见接受的答案为这个问题了解更多详细信息和链接代码示例。

这里的问题是内存,加载一次太多的高清晰度的图片,在照片应用程序不使用的tableview它使用滚动视图,它一次只能装载的3张照片一个最大,所以内存是不一个问题,如果你企图做类似照片应用程序使用的东西滚动视图

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top