AssetsLibrary和ImageView -setImage慢

时间:2010-07-14 02:44:50

标签: iphone assetslibrary

所以这个很奇怪我不确定问题是否与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];
    }
  }  
}

1 个答案:

答案 0 :(得分:0)

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

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