为什么MPMediaEntity / MPMediaItem使用valueForProperty



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

相关内容

  • 没有找到相关文章

最新更新