带有大量图像的 iPhone 桌面 View

标签 iphone performance image cell tableview

我有一个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:target:argument:order:mode: 安排预取的图像页面。使用 NSImage:imageNamed: 关闭主运行循环,然后当请求单元格时,如果您提前提取得足够远,它将可以显示。

不过,您需要痛苦地意识到内存问题。如果您发现这是一个问题,请使用 NSImage:initWithContentsOfFile: ,这将在内存不足的情况下清理图像缓存。根据缓存失效算法使用的策略,这些情况可能会在您清除缓存并必须重新加载失效的预取时导致“卡顿”。

关于带有大量图像的 iPhone 桌面 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247554/

相关文章:

iphone - 你怎么知道 pushViewController 保留了推送的对象?

mysql - 2k 行更新在 MySQL 中非常慢

长度 vs 折叠 vs 显式递归的性能特征

javascript - ES5中如何实现从服务器返回的图像延迟加载?

Swift:图像上的位置过滤掉图像的某些部分

iphone - iOS 5 UIWindow makeKeyAndVisible 关闭模态

iphone - NSKeyedUnarchiver - 如何防止崩溃

jquery - 如何在 jquery 对话框中将按钮更改为图片

iphone - 如何裁剪带 mask 的图像并将其与 iPhone 上的另一个图像(背景)组合? (首选 OpenGL ES 1.1)

iOS 模拟器 CPU 负载