Я пытаюсь получить всех исполнителей на локальном устройстве 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 секунды.
Поэтому мне интересно, есть ли более быстрый способ получить количество песен для артистов, чем то, что я делаю выше?
Обновление от 27 сентября 2011 г. Я вижу, что могу упростить поиск количества песен для исполнителя, используя это:
int songs = [collection count];
Вместо того, что я делал:
int songs = [[collection items] count];
Однако на практике это мало повлияло на производительность.
Я одолжил iPhone 3G, чтобы попробовать решить эту проблему на более медленном устройстве.
Мой код запускается на этом 3G всего за 17,5 секунд, всего 637 песен, распределенных по 308 исполнителям.
Если я закомментирую строку, которая извлекает количество песен, то же устройство завершит работу всего за 0,7 секунды...
Должен быть более быстрый способ получить количество песен на исполнителя на устройстве iOS.