【问题标题】:AssetsLibrary and ImageView -setImage SlownessAssetsLibrary 和 ImageView -setImage 缓慢
【发布时间】:2010-07-14 02:44:49
【问题描述】:

所以这个广告很奇怪

我正在使用 ALAssetsGroup 上的 -enumerateAssetsUsingBlock 方法加载带有 ALAsset 的数组。完成后,我正在加载自定义图像滚动条。当滚动条完成滚动时,我使用 NSInvocationOperations 从磁盘上的照片库中加载当前可见视图(页面)的图像。一旦图像被加载并被缓存,它会通知代理,然后代理从缓存中抓取图像并将其显示在滚动条的图像视图中。

一切正常,但是从 -setImage: 实际被调用到它实际显示在屏幕上所花费的时间令人难以忍受——有时需要 10 秒或更长时间才能真正显示出来。

我已经尝试过调整图像大小和不调整图像大小,这在我调整大小时几乎不会增加处理时间。正如我所说,在我在图像视图上调用 -setImage 之后,速度变慢了。有人知道 AssetLibrary API 的某些方面可能会导致这种情况吗?

以下是一些相关代码:

- (void)setImagesForVisiblePages;
{
  for (MomentImageView *page in visiblePages)
  {
    int index = [page index];
    ALAsset *asset = [photos objectAtIndex:index];

    UIImage *image = [assetImagesDictionary objectForKey:[self idForAsset:asset]];

    // If the image has already been cached, load it into the
    // image view. Otherwise, request the image be loaded from disk.
    if (image)
    {
      [[page imageView] setImage:image];
    }
    else {
      [self requestLoadImageForAsset:asset];      
      [[page imageView] setImage:nil];
    }
  }  
}

【问题讨论】:

    标签: iphone assetslibrary


    【解决方案1】:

    这可能会扰乱任何寻求解决 AssetsLibrary 问题的网络搜索,因此我深表歉意。事实证明,问题根本不是 AssetsLibrary,而是我对多线程的使用。图像加载完成后,我使用默认的 NSNotificationCenter 发布通知。它将它发布在后台线程上,然后使用 -setImage 更新(或至少尝试更新)UIImageView。一旦我将其更改为使用 -performSelectorOnMainThread 并让该选择器设置图像,一切都很好。

    似乎不管我对多线程有多熟悉,我还是会时不时忘记一些小问题。

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2013-05-14
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多