2016-08-24 4 views
1

Ich muss die Größe und das Datum der letzten Änderung von mehreren Dateien erhalten, die lokal in iOS gespeichert werden (speziell das temporäre Verzeichnis). Die Datei wird von einem NSURL verwiesen:NSFileManager.attributesOfItemAtPath vs USURL.getResourceValue für Dateigröße und Änderungsdatum

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

und

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

Was ist der Unterschied zwischen den beiden:

let fileURL: NSURL = ... 

ich zwei Weg, dies zu tun gefunden habe? Ist einer mehr performant als der andere?

Antwort

1

Man nimmt einen Pfad, man nimmt eine Datei-URL. Je nachdem, wie Sie starten, ist es möglicherweise besser, den Pfad oder die URL zu verwenden.

Es gibt verschiedene NSFileManager Methoden, mit denen Sie Datei-URLs auflisten und bestimmte Dateiattribute laden können. Wenn Sie eine dieser APIs verwenden, ist die Verwendung von getResourceValue auf der NSURL effizienter, da die Daten bereits vorhanden sind.

NSURL getResourceValue ist wahrscheinlich ein kleines bisschen effizienter, weil NSFileManager attributesOfItemAtPath wahrscheinlich (vielleicht?) Vorlädt alle seine Dateiattribute, die weniger effizient als einzelne Attribute erhalten würde. Aber das ist ein Implementierungsdetail.

Am Ende ist dies eine vorzeitige Optimierung. Verwenden Sie welche immer einfacher zu schreiben und zu pflegen ist. Machen Sie sich keine Sorgen über die Leistung, es sei denn, Sie haben ein Leistungsproblem, das behoben werden muss.

+0

In meinem Fall bekomme ich die Datei-URLs von 'NSFileManager.defaultManager(). ContentsOfDirectoryAtURL (tempDir, einschließlichPropertiesForKeys: [String](), Optionen: [])', wobei tempDir 'NSURL.fileURLWithPath (NSTemporaryDirectory (), isDirectory: true) ', also ja, es beginnt mit NSFileManager –

+0

Dann aktualisieren Sie den 'includingPropertiesForKeys' -Parameterwert so, dass er die tatsächlichen Dateiattribute enthält, auf die Sie mit' getResourceValue' zugreifen wollen. Dies ist effizienter als die Verwendung von 'attributesOfItemAtPath', da Sie bereits eine' NSURL' besitzen und die benötigten Attribute vorab laden können. – rmaddy

Verwandte Themen