0

所以这个广告很奇怪,我不确定问题是否出在 AssetsLibrary API 上,但我不知道还会发生什么。

我正在使用 ALAssetsGroup 上的 -enumerateAssetsUsingBlock 方法加载带有 ALAssets 的数组。完成后,我正在加载自定义图像滚动条。当滚动条完成滚动时,我使用 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];
    }
  }  
}
4

1 回答 1

0

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

似乎无论我对多线程有多熟悉,我仍然会时不时忘记一些小问题。

于 2010-07-14T22:38:53.707 回答