ローカル 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 秒かかり、308 のアーティストにまたがる 637 曲しかありません。
曲数を取得する行をコメントアウトすると、同じデバイスがわずか0.7秒で終了します...
iOS デバイスでアーティストごとの曲数を取得するより高速な方法が必要です。