gpt4 book ai didi

ios - 异步加载大型 UIImages

转载 作者:行者123 更新时间:2023-12-01 19:16:28 25 4
gpt4 key购买 nike

我有一个 NSManagedObject,它的图片存储在 /var/mobile/Applications/.../.../uniqueIDforNSMO/Pictures/ 之类的地方

通过根据 NSMO 的 uniqueID 找到这些图片,我可以毫无问题地从磁盘中取出这些图片,我有一个 DataController 可以为我提取它们,而且性能非常好。但是当我尝试将这些图片添加到 View 时遇到问题,UI 被阻止。我怀疑问题在于这些图像的分辨率非常高(它们是来自 iPad 相机胶卷的图像)。

显示 5 张图像大约需要 3 秒,从而使 UI 被阻止。即使只显示 2 张图像也会阻止该死的 UI。这是我在后台线程上添加它们的方法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [self.photos objectAtIndex:index];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = image;
});
});

如果我设置 imageView.image 而不调度它需要更长的时间。

问题可能是图像太大,而单元格的 imageViews 只有 150x150?还是因为我一开始只有对图像的引用,所以图像的实现是慢的部分?

任何人都可以在这里提出任何建议吗?我曾尝试在图像返回数组之前调整图像大小,但这没有帮助。

最佳答案

问题是图像被延迟加载 - UIImage仅在需要绘制时才将图像加载到内存中。您可以做的是在后台线程上急切地加载图像:

  • 创建 CGBitmapContextRef使用 UIGraphicsBeginImageContext
  • 将图像绘制到上下文中
  • 使用 UIGraphicsGetImageFromCurrentImageContext 从上下文中获取新图像
  • 将图像传回主线程
  • 关于ios - 异步加载大型 UIImages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959416/

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