2016-08-24 5 views
1

Мне нужно получить размер и дату последней модификации нескольких файлов, хранящихся локально в iOS (в частности, в каталоге temp). Файл ссылается NSURL:NSFileManager.attributesOfItemAtPath vs USURL.getResourceValue для размера и даты изменения файла

let fileURL: NSURL = ... 

Я нашел два способа сделать это:

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

и

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

В чем разница между ними? Является ли еще один исполнитель, чем другой?

ответ

1

Один берет путь, один берет URL-адрес файла. В зависимости от того, как вы начинаете, лучше использовать путь или URL-адрес.

Существуют различные методы NSFileManager, которые позволяют перечислять URL-адреса файлов и предварительно загружать определенные атрибуты файла. Если вы используете один из этих API, то использование getResourceValue на NSURL будет более эффективным, так как данные уже на месте.

NSURL getResourceValue, вероятно, крошечный бит более эффективен, потому что NSFileManager attributesOfItemAtPath вероятно (возможно?) Предварительно загружает все его атрибуты файла, которые были бы менее эффективны, чем получение отдельных атрибутов. Но это детализация реализации.

В конце концов, это преждевременная оптимизация. Используйте, который когда-либо легче писать и поддерживать. Не беспокойтесь о производительности, если у вас нет проблемы с производительностью, с которой нужно иметь дело.

+0

В моем случае я получаю URL-адреса файлов из 'NSFileManager.defaultManager(). ContentsOfDirectoryAtURL (tempDir, включаяPropertiesForKeys: [String](), options: [])', где tempDir - это NSURL.fileURLWithPath (NSTemporaryDirectory (), isDirectory: true) ', так что да, это начинается с NSFileManager –

+0

Затем обновите значение параметра' includingPropertiesForKeys', чтобы включить фактические атрибуты файлов, которые вы хотите получить, используя 'getResourceValue'. Это будет более эффективно, чем использование 'attributesOfItemAtPath', поскольку у вас уже есть' NSURL' и может предварительно загрузить необходимые атрибуты. – rmaddy