我正在使用 assets 枚举器块来填充两个数组;一个用于库资源,一个用于全屏图片。_albumAssets数组用作一个collectionView的数据源,而_albumPics用作我的详细滚动视图的数据源。因为我在同一个块的两个数组中添加元素,所以性能很差。我认为直接从块中将对象添加到我的数组是可以的,因为块在单独的线程中执行。所以我想出了这个代码,也许这是一件愚蠢的事情,我不确定。我的表现提高了很多,但遗憾的是现在我得到了NSRangeException因此,我们将不胜感激任何帮助或建议。奇怪的是我只是有时会得到这个,这意味着我通过点击我的collectionView中的缩略图来展示我的详细 ScrollViewController 。当我开始浏览我的图像时,有时会出现异常,有时不会...
-(void)enumerateAssetsFromGroup:(ALAssetsGroup *)group
{
[_albumAssets removeAllObjects];
[_albumPics removeAllObjects];
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if (result != NULL) {
[_albumAssets addObject: result];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ALAssetRepresentation *assetRep = [result defaultRepresentation];
img = [UIImage imageWithCGImage:[assetRep fullScreenImage]];
[_albumPics addObject:img];
});
}
[self.collectionView reloadData];
};
[group enumerateAssetsUsingBlock: assetEnumerator];
}