ios - iPhone 照片应用程序如何如此快速流畅地加载这么多图像?

标签 ios xcode performance uiimage

我正在构建一个应用程序,该应用程序需要将一堆本地镜像显示在 uitableviewcell 的 ImageView 中。但是,我在优化 uitableview 的性能时遇到了困难。我特别注意到两个问题:首先, View 需要一段时间才能加载。其次,当显示新单元格时,滚动会变得迟缓。

viewDidLoad 正在像这样加载图像:

for (Object *object in self.objects)
{
    object.thumbnail = [UIImage imageNamed:object.imageName];
}

这显然会导致长时间加载问题,但我不确定还有什么方法可以加载这些图像。是尺寸问题吗?这只是一种糟糕的做法吗?

显示图像的过程似乎也有问题,换句话说,即使将图像分配给缩略图属性后,它们仍然需要很长时间才能绘制。

虽然这是一个特定案例,但我更普遍地好奇苹果如何如此高效地加载照片中的图像。有什么见解吗?谢谢

最佳答案

每当我发现我的 UI 滞后时,我首先怀疑我正在同步执行某些操作(在主线程上),而这些操作本应异步执行(在后台线程上)。

我也很好奇 Apple 究竟是如何在照片应用中实现这种性能的。我现在正在编写一个与您的要求相似的应用程序。我目前的方法是在用户打开我的 View Controller 时将一堆照片从磁盘异步加载到内存中,并在用户滚动时继续从内存中加载(和删除照片) - 提前。

目前,我在索引路径的行单元格中异步加载磁盘中的每张照片,速度非常快,但如果您快速滚动表格 View ,则会导致这种级联效果发生。也就是说,在照片出现之前,单元格会暂时显示为空。

我希望这对您有所启发。

您可能也有兴趣尝试 SDWebImage - 它包含一个图像缓存对象,在处理本地照片时让我的生活变得更轻松。

关于ios - iPhone 照片应用程序如何如此快速流畅地加载这么多图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13481561/

相关文章:

objective-c - 使用 UIImage 定义背景图像

php - 使用 APNS 向 IOS 设备发送推送通知,使用 PHP 向数据服务发送推送通知

ios - 将实时视频从 iphone 重新流式传输到服务器

performance - 非时间负载和硬件预取器,它们可以一起工作吗?

performance - Grails - 在普通 Groovy 类中访问 Bean 的最佳方式

python - scipy.spatial.transform.Rotation 旋转数组与同一对象内的堆栈

ios - UITableView:reloadRows(at :)每次点击两次才能更新表并滚动

ios - YTPlayer将重定向到OAuth2 URL并显示“请稍候”

ios - 从 Xcode 在设备上构建与从 TestFlight 下载 - 问题

ios - 如何使对象免于 SKcameranode 移动