为啥 MPMediaEntity / MPMediaItem 使用 valueForProperty?
Posted
技术标签:
【中文标题】为啥 MPMediaEntity / MPMediaItem 使用 valueForProperty?【英文标题】: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
【问题讨论】:
【参考方案1】:除了MPMediaEntity
之外,这种模式还用于少数情况。一个例子包括NSURL
(使用getResourceValue:forKey:error:
。
这种模式最可能的原因是因为有太多可能的值,并且随着时间的推移会出现新值。通过使用一种方法(以及不断增长的键列表),界面更加简洁。否则,该类将具有数十个属性,并且每次添加新值时类接口都会发生变化。
它还可以更轻松地实现其他一些方法,例如 enumerateValuesForProperties:usingBlock:
和 canFilterByProperty:
,因为您只需提供代表值的键。如果该类的每个值都有普通的旧属性,那么实现这样的方法会更加困难。
【讨论】:
太棒了。我认为创建一个方便访问的类别不会有任何害处:github.com/hodgesmr/MPMediaItem-Accessors【参考方案2】:在当前的 SDK 中,Apple 为您定义了类型安全的 getter。
【讨论】:
以上是关于为啥 MPMediaEntity / MPMediaItem 使用 valueForProperty?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 glTranslatef?为啥不直接更改渲染坐标?