gpt4 book ai didi

ios - 异步加载所有单元格内容

转载 作者:可可西里 更新时间:2023-11-01 02:04:01 24 4
gpt4 key购买 nike

关于如何异步加载图像和其他下载的数据有很多问题,但没有关于将这些图像(一旦下载)异步加载到 UI 的问题。

虽然我正在寻找适用于所有 View 的解决方案,但我正在尝试在我的 UICollectionView 上实现 60 fps 的滚动。

例如,如果我的 Assets 文件夹中有图像,我想将其加载到快速滚动的 UIScrollView 中,将它们带入内存然后在 UI 中绘制需要时间。有没有办法先将这些图像缓存在内存中(同时不损害内存/使用太多),然后在它们缓存在内存中后将它们加载到单元格中?

据我现在的理解,当我说,

cell.imageView.image = UIImage(named: "grapes")

Assets 文件夹 grapes 被打开并读取,然后它将相应的图像(1x、2x 或 3x)放入内存。将正确的图像带入内存后,将 cell.imageView.image 分配给它,然后绘制图像。这是准确的吗?所有这些都发生在主线程上吗?如果是这样,那么这是否有可能阻塞主线程并导致设备跳过某些帧?

我假设在解决复杂表达式(例如,格式化文本)时会发生类似的过程。如果是这样,那么我能否以及如何创建要异步加载的内容,以便主线程不会被阻塞(即使以暂时清空内容 View 为代价)?

最佳答案

是的,将图像加载到内存中可能需要几毫秒的时间。如果图像的大小不适合 UI,它尤其会影响体验(例如,您依赖 contentMode 之类的 scaleAspectFit.scaleAspectFill 来使图像大小合适;或者如果您手动调整大小/自己裁剪图像)。这可能会无害地导致一些计算复杂得惊人的事情。

一般来说,出现问题还不够,但它会阻止您达到最佳的 60 fps。如果您想要最佳性能,您可以进行异步检索,将其与 table view prefetching 结合使用或 collection view prefetching .

对于复杂的表达式和文本格式,不太可能引入足够的延迟来阻止 60 fps。但不要猜测(重新这个或图像)。您应该通过 Instruments 分析“发布”构建(启用优化)的 fps,并查看其中哪些(如果有的话)对 fps 有明显影响。并在您的目标物理设备上进行测试,而不是在模拟器上进行测试,因为过早地浪费时间优化不会在物理设备上发生的问题将是一种耻辱。

关于ios - 异步加载所有单元格内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44592189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com