所以这是一个相当奇怪的广告,我不确定是不是AssetsLibrary应用程序接口出了问题,但我不知道还会发生什么。
我使用ALAssets在ALAssetsGroup上使用-enumerateAssetsUsingBlock方法加载一个数组。当它完成时,我正在加载一个自定义的图像滚动条。滚动结束时,我使用NSInvocationOperations从磁盘上的图片库加载当前可见视图(页面)的图像。一旦图像被加载和缓存,它就会通知代理,然后代理从缓存中抓取图像,并在滚动条的图像视图中显示它。
一切正常,但是从实际调用-setImage:到它实际显示在屏幕上所花费的时间是无法忍受的--有时需要10秒或更长时间才真正显示出来。
我已经尝试过使用和不使用图像大小调整,这几乎不会增加我调整大小时的处理时间。正如我所说的,在图像视图上调用-setImage之后,速度会变慢。有没有人知道可能导致这种情况的AssetLibrary应用编程接口的某些方面?
下面是一些相关的代码:
- (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];
}
}
}发布于 2010-07-15 06:38:54
这可能会扰乱任何寻求解决AssetsLibrary问题的网络搜索,因此我对此表示道歉。事实证明,问题根本不是AssetsLibrary造成的,而是我对多线程的使用。图像加载完成后,我使用默认的NSNotificationCenter发布了一个通知。它将其发布到后台线程,然后后台线程正在使用-setImage更新(或至少尝试更新) UIImageView。一旦我将其更改为使用-performSelectorOnMainThread,并让该选择器设置图像,一切都很好。
似乎无论我对多线程有多熟悉,我仍然会时不时地忘记一些小问题。
https://stackoverflow.com/questions/3243052
复制相似问题