【问题标题】: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。

    【讨论】: