ios - 为什么 MPMediaEntity/MPMediaItem 使用 valueForProperty?

标签 ios objective-c mpmediaitem

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/

相关文章:

ios - 如何使用上一个和下一个按钮(如一组 10 个问题的幻灯片放映)来导航页面?

ios - 如何检查剪贴板中是否有内容

objective-c - 我更改 UIBUtton 背景图像的方式有什么问题?

ios - 如何使用 AVPlayer 播放 instagram 视频

ios - 应用程序支持 ipad 和 iphone 中的应用程序横向和纵向模式

iphone - UINavigationController:如何删除堆栈 View

swift - 是否可以访问通过 Apple Music 下载的音乐?

objective-c - 将 CGRect 存储到 plist 时出现问题

ios - 获取 MPMediaItem 添加到 iTunes 库的日期