性能 - UICollectionView 加载时间很慢

Posted

技术标签:

【中文标题】性能 - UICollectionView 加载时间很慢【英文标题】:Performance - UICollectionView Loading time very slow 【发布时间】:2014-03-25 10:14:35 【问题描述】:

我正在编写一个应用程序,它使用 iDevice 相机拍照并将其作为 PNG 存储在文件系统中。启动我的应用程序时,我加载了一个 UICollectionView,其中包含在文件系统上找到的图像。

我面临的问题是应用程序的加载时间(即使它仅加载 6 张图像大约需要 4 秒,这是不可接受的。我已经实现 GCD 以在后台线程上加载图像(这使 UI 保持快速)但是我真的希望应用程序在加载图像时启动得更快。

我的想法是:

我怀疑initWithContentsOfFile 需要很长时间才能加载完整尺寸的图像。 我想过在拍照时生成一个单独的缩略图并加载它。

最终,当我查看 Apple 的照片应用程序时,它会“立即”加载并显示 10 张图片。

有人对我如何更快地加载图像或至少看起来加载图像有任何建议吗?

谢谢!

【问题讨论】:

你试过imageNamed方法吗? 这一定会加载得更快吗? 可能不在第一次加载时,但imageNamed 执行缓存而后者不执行。 好的,谢谢。我确实有单独的缓存代码,它的初始负载是主要问题。 你在设备上试过了吗?图像有多大?如果它们的大小相当大,除了异步加载它们之外,您无能为力。 【参考方案1】:

检查此示例代码并尝试从中获得一些想法 https://developer.apple.com/library/ios/samplecode/lazytableimages/introduction/intro.html

【讨论】:

今天早上读到,我看不出哪一点有帮助?我错过了什么吗?我知道我可以在加载单元格时放置一个占位符图像,但这不是 Photo 应用程序所做的。 @Spanners:看到这个项目有助于从网络下载图像,在你的情况下,图像数据存储在你的本地数据库中,所以试着从中汲取灵感。希望这对你有帮助,否则请参考网络上的一些惰性图像加载教程可能会对您有所帮助。【参考方案2】:

试试这个

在后台线程中加载图像并在主线程中设置

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^

    UIImage *image = [UIImage imageWithContentsOfFile:frontPath];

    dispatch_async(dispatch_get_main_queue(), ^
        [self.frontButton setBackgroundImage:image forState:UIControlStateNormal];
    );
);

【讨论】:

我在 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 方法中执行此操作,但视图的初始加载需要很长时间。 还需要时间吗?? 是的 - 因为它的初始加载需要时间,而不是任何重新加载。

以上是关于性能 - UICollectionView 加载时间很慢的主要内容,如果未能解决你的问题,请参考以下文章

加载 UICollectionView 时崩溃,为啥?

UICollectionView 的滚动性能不佳 - 分析指向可访问性调用

UICollectionView。如何在幕后插入新项目?

重新加载和调用requestImageForAsset时UICollectionView闪烁

uicollectionview 可重用单元格图像在滚动时加载

重新加载 UICollectionView 时 UIActivityIndi​​cator 不会停止