Почему MPMediaEntity/MPMediaItem использует значениеForProperty?

документы для MPMediaEntity (и, соответственно, MPMediaItem) объясняют, что для доступа к свойствам необходимо использовать valueForProperty:, а затем он определяет список ключей, которые будут возвращать свойства. Мне любопытно, почему эти метаданные должны запрашиваться таким образом. Почему MPMediaEntity просто не раскрывает свойства объекта или геттеры?

Пример:

NSString* title = (NSString*)[item valueForProperty:MPMediaItemPropertyTitle];

Почему бы не что-то вроде:

NSString* title = item.title

person hodgesmr    schedule 29.05.2014    source источник


Ответы (2)


Этот шаблон используется в нескольких случаях в дополнение к MPMediaEntity. Пример включает NSURL (с использованием getResourceValue:forKey:error:.

Наиболее вероятная причина этого шаблона заключается в том, что существует очень много возможных значений, и со временем могут появляться новые значения. Интерфейс стал чище благодаря одному методу (и растущему списку ключей). В противном случае у класса были бы десятки свойств, и интерфейс класса менялся бы каждый раз, когда добавляется новое значение.

Это также упрощает реализацию некоторых других методов, таких как enumerateValuesForProperties:usingBlock: и canFilterByProperty:, поскольку вы просто предоставляете ключи, представляющие значения. Если бы у класса были простые старые свойства для каждого значения, реализация таких методов была бы намного сложнее.

person rmaddy    schedule 29.05.2014
comment
Отлично. Я подумал, что не будет лишним создать категорию для удобства доступа: github.com/hodgesmr/MPMediaItem-Accessors - person hodgesmr; 30.05.2014

В текущем SDK Apple определила безопасные для типов геттеры.

person DavidPhillipOster    schedule 01.12.2014