从ios媒体库检索元信息的最快方法?
我试图从ios媒体库中检索元信息,然后用json将其发送到服务器 然而,我发现在MPMediaQuery结果中循环并提取元信息的速度非常慢从ios媒体库检索元信息的最快方法?,ios,objective-c,Ios,Objective C,我试图从ios媒体库中检索元信息,然后用json将其发送到服务器 然而,我发现在MPMediaQuery结果中循环并提取元信息的速度非常慢 MPMediaQuery *query = [[MPMediaQuery alloc]init]; MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeMusic] f
MPMediaQuery *query = [[MPMediaQuery alloc]init];
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeMusic] forProperty:MPMediaItemPropertyMediaType];
[query addFilterPredicate:predicate];
NSMutableArray *songs = [[NSMutableArray alloc] init];
songs = [query items];
[songs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[obj valueForProperty:MPMediaItemPropertyTitle];
[obj valueForProperty:MPMediaItemPropertyPlaybackDuration];
[obj valueForProperty:MPMediaItemPropertyArtist];
[obj valueForProperty:MPMediaItemPropertyAlbumTitle];
[obj valueForProperty:MPMediaItemPropertyGenre];
[obj valueForProperty:MPMediaItemPropertyAlbumTrackNumber];
}];
对于9000首歌曲的库,完成枚举循环可能需要25秒以上
有没有更快的方法批量检索元信息?在这种情况下,ValueForProperty似乎效率很低(循环中的每次调用都会增加大约5秒)。MPMediaItem的文档指出,使用
enumerateValuesForProperties:usingBlock:
通常比单独调用ValueForProperty:
更快。试试这个:
NSSet *properties = [NSSet setWithArray:@[ MPMediaItemPropertyTitle, MPMediaItemPropertyPlaybackDuration, MPMediaItemPropertyArtist, MPMediaItemPropertyAlbumTitle, MPMediaItemPropertyGenre, MPMediaItemPropertyAlbumTrackNumber ]];
[songs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
MPMediaItem *item = (MPMediaItem *)obj;
[item enumerateValuesForProperties:properties usingBlock:^(NSString *property, id value, BOOL *stop) {
// do something with this property / value pair
}];
}];
利用你的建议,我设法把时间缩短了一半。谢谢我还可以做其他优化吗?我只知道这些。也许您可以缓存结果,只在需要时获取项目的属性。