docs for MPMediaEntity (因此 MPMediaItem)说明要访问属性,您必须使用 valueForProperty:
然后它定义了一个 list of keys这将返回属性。我很好奇为什么必须以这种方式查询此元数据。为什么 MPMediaEntity 不简单地公开对象属性或 getter?
例子:
NSString* title = (NSString*)[item valueForProperty:MPMediaItemPropertyTitle];
为什么不这样:
NSString* title = item.title
最佳答案
除了 MPMediaEntity
之外,这种模式还用于少数情况。 .一个例子包括 NSURL
(使用 getResourceValue:forKey:error:
。
这种模式最可能的原因是因为有很多可能的值,并且随着时间的推移会出现新的值。通过使用一种方法(以及不断增长的键列表),界面更加简洁。否则,该类将具有数十个属性,并且每次添加新值时类接口(interface)都会发生变化。
它还可以更轻松地实现一些其他方法,例如 enumerateValuesForProperties:usingBlock:
和 canFilterByProperty:
因为您只需提供代表值的键。如果该类对每个值都有普通的旧属性,那么实现这些方法会更加困难。
关于ios - 为什么 MPMediaEntity/MPMediaItem 使用 valueForProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23925226/