我正在寻找计算 ALAssetLibrary 中项目数量的最快方法。至少在这一点上,我不关心 /what/ 里面有什么,只是里面有很多东西。
对于音乐/音乐视频,这很容易:
MPMediaQuery* query = [[MPMediaQuery alloc] init];
int numItems = [[query items] count];
对于 ALAssetLibrary,我能想到的最好的就是像这样疯狂的东西(在这里手工输入,所以可能有错误):
ALAssetsLibrary* assetLibrary = [[ALAssetsLibrary alloc] init];
ALAssetsGroupType groupType = ALAssetsGroupAll;
int numAssets=0;
[assetLibrary enumerateGroupsWithTypes:groupType
usingBlock:^(ALAssetsGroup* group, BOOL* stop){
if (group)
{
[group enumerateAssetsUsingBlock:^(ALAsset* asset, NSUInteger index, BOOL* innerstop)
{
if (asset)
{
numAssets++;
}
}];
}
}];
我可以看到,如果我只有 10 张图片/视频,但即使在移动设备上,也很容易拥有数千张。
此外,因为它是在块中的,所以我必须围绕此代码设置锁以使其同步,从而进一步减慢速度。
有 /got/ 是做这种事情的更好方法。任何人?
-肯