【问题标题】:Why does MPMediaEntity / MPMediaItem use valueForProperty?为什么 MPMediaEntity / MPMediaItem 使用 valueForProperty?
【发布时间】:2014-05-29 03:26:37
【问题描述】:
docs for MPMediaEntity(以及 MPMediaItem)解释说,要访问属性,您必须使用 valueForProperty:,然后它定义了一个将返回属性的 list of keys。我很好奇为什么必须以这种方式查询此元数据。为什么 MPMediaEntity 不简单地公开对象属性或 getter?
例子:
NSString* title = (NSString*)[item valueForProperty:MPMediaItemPropertyTitle];
为什么不这样:
NSString* title = item.title
【问题讨论】:
标签:
ios
objective-c
mpmediaitem
【解决方案1】:
除了MPMediaEntity 之外,这种模式还用于少数情况。一个例子包括NSURL(使用getResourceValue:forKey:error:。
这种模式最可能的原因是因为有太多可能的值,并且随着时间的推移会出现新值。通过使用一种方法(以及不断增长的键列表),界面更加简洁。否则,该类将具有数十个属性,并且每次添加新值时类接口都会发生变化。
它还可以更轻松地实现其他一些方法,例如 enumerateValuesForProperties:usingBlock: 和 canFilterByProperty:,因为您只需提供代表值的键。如果该类的每个值都有普通的旧属性,那么实现这样的方法会更加困难。
【解决方案2】:
在当前的 SDK 中,Apple 为您定义了类型安全的 getter。