所以这个很奇怪我不确定问题是否与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];
}
}
}
答案 0 :(得分:0)
这可能会破坏任何寻求解决AssetsLibrary问题的网络搜索,所以我为此道歉。事实证明,问题根本不是AssetsLibrary,而是我使用多线程。图像加载完成后,我使用默认的NSNotificationCenter发布通知。它是在后台线程上发布的,然后使用-setImage更新(或尝试更新,至少)UIImageView。一旦我改变它以使用-performSelectorOnMainThread并让该选择器设置图像,一切都很好。
似乎无论我对多线程有多熟悉,我仍然会不时忘记这些小问题。