我正在尝试检索本地 iOS 设备上的所有艺术家,以及对于每个艺术家,该艺术家可用的歌曲数量。
我目前正在以直接的方式执行此操作,通过查询所有艺术家和每个艺术家,计算其收藏中的项目(歌曲)数量:
MPMediaQuery *query = [[MPMediaQuery alloc] init];
[query setGroupingType:MPMediaGroupingArtist];
NSArray *collections = [query collections];
for (MPMediaItemCollection *collection in collections)
{
MPMediaItem *representativeItem = [collection representativeItem];
int songs = [[collection items] count];
// do stuff here with the number of songs for this artist
}
但是,这似乎不是很有效,或者至少,它比我预期的要慢。
在拥有数百位艺术家的演示 iPhone 4 设备上,上述代码运行大约需要 7 秒。当我注释掉获取“收藏项”计数的行时,时间减少到 1 秒。
所以我想知道是否有比我上面所做的更快的方法来检索艺术家的歌曲数量?
2011 年 9 月 27 日更新。我看到我可以使用以下方法简化艺术家的歌曲计数检索:
int songs = [collection count];
而不是我在做什么:
int songs = [[collection items] count];
然而,实际上这对性能几乎没有影响。
我借了一部 iPhone 3G 在较慢的设备上尝试这个问题的性能。
我的代码在这个 3G 上运行需要 17.5 秒,只有 637 首歌曲分布在 308 位艺术家中。
如果我注释掉检索歌曲数量的行,同一台设备只需 0.7 秒即可完成...
必须有一种更快的方法来检索 iOS 设备上每位艺术家的歌曲数量。