【问题标题】:iphone tableview with a lot of images带有很多图像的iphone tableview
【发布时间】:2010-11-17 20:48:53
【问题描述】:

我有一个UITableView,它在单元格中显示了很多图像,我对滚动性能并不满意。我的UITableView 类似于 iPhone 上的照片应用程序。有谁知道为什么 iphone foto 应用程序滚动得如此之快,好像屏幕上什么都没有。

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

【问题讨论】:

    标签: iphone performance image cell tableview


    【解决方案1】:

    您应该预先缓存您的图像,而不是偷懒。当您滚动表格时,会调用 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:,它会在内存不足的情况下清理图像缓存。根据缓存失效算法使用的策略,这些情况可能会在您清除缓存时导致“卡顿”并且必须重新加载失效的预取。

    【讨论】:

    • 我不必使用丹尼尔建议的滚动视图吗?他们有区别吗?
    • 否 - 事实上,丹尼尔斯的评论有点奇怪,因为我对照片应用程序的看法是,它会在屏幕上加载整个照片网格,四宽。这要困难得多 - 但他们正在做的是保留缩略图并使用它们。如果你快速滑动它仍然不是完全流畅,它会有点口吃。该表实际上更简单,因为它可以让您知道何时需要获取更多图像。
    【解决方案2】:

    通过继承 UITableViewCell 并直接绘制每个单元格的内容,报告了出色的滚动性能结果。有关更多详细信息和代码示例的链接,请参阅this question 的已接受答案。

    【讨论】:

    • 您链接到的博客中的讨论不适合这个问题 - 它谈论的是 iphone 中的合成性能,并建议您通过实现自己的绘图代码来使用完全不透明度来解决这个问题。这个问题可能没有遇到这个问题。通常,除非您有充分的理由,否则您不应该扩展单元格本身!最好添加到 contentView 并设置 backgroundView 以便正确处理表格动画。
    【解决方案3】:

    这里的问题是内存,你一次加载太多高分辨率图片,foto应用程序不使用tableview它使用滚动视图,它一次最多只能加载3张图片,所以内存不是一个问题,如果你试图做一些类似于 foto 应用程序的事情,请使用滚动视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多