【问题标题】:NSFileManager.attributesOfItemAtPath vs USURL.getResourceValue for file size and modification dateNSFileManager.attributesOfItemAtPath 与 USURL.getResourceValue 的文件大小和修改日期
【发布时间】:2016-12-31 20:57:25
【问题描述】:

我需要获取本地存储在 iOS 中的几个文件(特别是 temp 目录)的大小和最后修改日期。该文件被NSURL引用:

let fileURL: NSURL = ...

我找到了两种方法:

NSFileManager.defaultManager().attributesOfItemAtPath(fileURL.path!)[NSFileSize]

var size: AnyObject?
fileURL.getResourceValue(&size, forKey: "NSURLFileSizeKey")

这两者有什么区别?一个比另一个性能更好吗?

【问题讨论】:

    标签: ios nsurl nsfilemanager


    【解决方案1】:

    一个接受路径,一个接受文件 URL。根据您的开始方式,使用路径或 URL 可能会更好。

    有多种NSFileManager 方法可让您枚举文件 URL 并预加载特定文件属性。如果您正在使用其中一种 API,那么在 NSURL 上使用 getResourceValue 会更有效,因为数据已经到位。

    NSURL getResourceValue 可能更高效一点,因为NSFileManager attributesOfItemAtPath 可能(也许?)预加载其所有文件属性,这比获取单个属性效率低。但这是一个实现细节。

    说到底,这是过早的优化。使用哪个更容易编写和维护。除非您有需要处理的性能问题,否则不要担心性能。

    【讨论】:

    • 在我的例子中,我从 NSFileManager.defaultManager().contentsOfDirectoryAtURL(tempDir, includingPropertiesForKeys: [String](), options: []) 获取文件 URL,其中 tempDir 是 NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true),所以是的,它从 NSFileManager 开始
    • 然后更新includingPropertiesForKeys 参数值以包含您希望使用getResourceValue 访问的实际文件属性。这将比使用attributesOfItemAtPath 更有效,因为您已经拥有NSURL 并且可以预加载所需的属性。
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多