Причина не использовать ICloneable не , потому что это не имеет универсального интерфейса. причина не использовать его состоит в том, потому что это неопределенно . Это не ясно дает понять, получаете ли Вы отмель или глубокую копию; это до лица, осуществляющего внедрение.
Да, MemberwiseClone
делает мелкую копию, но противоположность MemberwiseClone
не Clone
; это было бы, возможно, DeepClone
, который не существует. При использовании объекта через его интерфейс ICloneable Вы не можете знать, какой вид клонирования основного объекта работает. (И XML-комментарии не прояснят, потому что Вы получите интерфейсные комментарии, а не тех на методе Клона объекта.)
то, Что я обычно делаю, просто делают Copy
метод, который делает точно, что я хочу.
Информация ID3 может быть прочитана путем извлечения свойства kAudioFilePropertyInfoDictionary
аудиофайла с помощью функции AudioFileGetProperty
инфраструктуры AudioToolbox.
Подробное объяснение доступно на iphonedevbook.com
редактировать: Исходная ссылка теперь недоступна. InformIT имеет похожий пример кода, но он не такой полный.
Существует не так много библиотек синтаксического анализа ID3, на которые не распространяется GPL. Существует платформа Objective-C , которую, вероятно, можно было бы модифицировать для работы на iPhone при статической связи, но это LGPL. Чтобы соответствовать условиям LGPL со статически связанным двоичным файлом, вы должны предоставить достаточно промежуточных компонентов, чтобы кто-то мог повторно связать его со своей собственной версией библиотеки, что сложно (но не невозможно) для приложения для iPhone. Конечно, поскольку я не был в ситуации, когда мне приходилось это делать, я на самом деле не обсуждал это с юристом, и, поскольку я не из тех, вы не должны воспринимать это как авторитетный.
Лучше всего, если вы этого не сделаете ' Мне кажется, проконсультироваться с юристом - это использовать библиотеку C с более широкой лицензией, например libID3 , и включить ее в некоторые классы Objective C. Я также рекомендовал бы просто включить код напрямую, а не заниматься всеми проблемами сборки и компоновки статической библиотеки, но это всего лишь вопрос личного стиля.
Изучите структуру Media Player:
Для этого необходимо, чтобы рассматриваемый MP3 был частью библиотеки iPod на телефоне.
Например, определение имени каждого медиа-файла на телефоне (включая фильмы, подкасты и т. Д.):
MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSArray *itemsFromGenericQuery = [everything items];
for (MPMediaItem *item in itemsFromGenericQuery) {
NSString *itemTitle = [item valueForProperty:MPMediaItemPropertyTitle];
// ...
}
Похоже, что доступны следующие свойства:[Тысяча двести пятьдесят два] MPMediaItemPropertyMediaType
MPMediaItemPropertyTitle
MPMediaItemPropertyAlbumTitle [1 255] MPMediaItemPropertyArtist
MPMediaItemPropertyAlbumArtist
MPMediaItemPropertyGenre
MPMediaItemPropertyComposer [+1259] MPMediaItemPropertyPlaybackDuration
MPMediaItemPropertyAlbumTrackNumber [один тысяча двести шестьдесят один] MPMediaItemPropertyAlbumTrackCount [тысяча двести шестьдесят-два] MPMediaItemPropertyDiscNumber [1 263] MPMediaItemPropertyDiscCount [+1264 ] MPMediaItemPropertyArtwork
MPMediaItemPropertyLyrics
MPMediaItemPropertyIsCompilation
Выполнение этого без прохождения через структуру медиаплеера будет несколько трудным, и потребуется внешняя структура.