2013-04-18 8 views
9

Kürzlich lerne ich über NSKeyedArchiver und NSKeyedUnarchiver. Ich habe festgestellt, dass es drei Möglichkeiten gibt, ein Array zu archivieren, und ich versuche, die Unterschiede herauszufinden.Unterschiede mit ArchiveRootObject: toFile: und writeToFile:

1.Using archiveRootObject:toFile:

[NSKeyedArchiver archiveRootObject:testArray toFile:filePath]; 

2.Get Daten aus archivedDataWithRootObject: und schreiben Sie es

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:testArray]; 
    [data writeToFile:filePath atomically:YES]; 

3.Using encodeObject in Datei: erhalten Daten

NSMutableData *data = [NSMutableData data]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:testArray forKey:@"testArray"]; 
    [archiver finishEncoding]; 
    [data writeToFile:path atomically:YES]; 

Nach dem Testen habe ich festgestellt, dass alle oben genannten Möglichkeiten gut funktionieren und den gleichen Inhalt in die Datei schreiben.

Q1: Was sind die Unterschiede mit allen oben genannten Möglichkeiten?

Q2: Kann ich NSData auf die 3. Art benutzen?

Antwort

5

Der erste gibt Ihnen keine Wahl, was mit den Daten zu tun ist. Es wird in eine Datei gehen. Ich verwende den zweiten Weg, um beispielsweise Daten über eine Netzwerkverbindung zu senden. Es ist flexibler. Der 3. Weg macht dasselbe, außer dass man einzelne Objekte hineinlegen kann. Ich bin mir nicht sicher, ob es mit einem Array funktioniert, wie es steht, aber es könnte. Es ist noch flexibler, so dass Sie kein Array oder Dictionary dafür benötigen.

Das ist es ziemlich viel. Es geht um Komfort gegen Flexibilität.

Verwandte Themen