MPMediaEntity(以及MPMediaItem)的文档解释说,要访问属性,必须使用valueForProperty:
,然后它定义了一个返回属性的键列表。我很好奇为什么要以这种方式查询元数据。为什么MPMediaEntity不简单地暴露对象属性或getter ?
的例子:
NSString* title = (NSString*)[item valueForProperty:MPMediaItemPropertyTitle];
为什么不这样写呢:
NSString* title = item.title
除了MPMediaEntity
之外,这种模式还在少数情况下使用。以NSURL
为例(使用getResourceValue:forKey:error:
)
出现这种模式最可能的原因是有太多可能的值,并且随着时间的推移会出现新的值。通过使用一个方法(以及一个不断增长的键列表),接口更加简洁。否则,类就会有几十个属性,每次添加一个新值时,类的接口就会改变。
它还使实现enumerateValuesForProperties:usingBlock:
和canFilterByProperty:
等其他方法更容易,因为您只需提供表示值的键。如果该类的每个值都有普通的旧属性,那么实现这样的方法将会困难得多。
在当前的SDK中,Apple已经为您定义了类型安全的getter