2013-04-18 9 views
9

Gần đây, tôi đang tìm hiểu về NSKeyedArchiver và NSKeyedUnarchiver. Tôi thấy rằng có ba cách để lưu trữ một mảng và tôi đang cố gắng tìm ra sự khác biệt.Sự khác biệt với archiveRootObject: toFile: và writeToFile:

1.Sử dụng archiveRootObject:toFile:

[NSKeyedArchiver archiveRootObject:testArray toFile:filePath]; 

dữ liệu 2.Get từ archivedDataWithRootObject: và ghi nó vào tập tin

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

3.Using encodeObject: để có được dữ liệu

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

Sau khi thử nghiệm, tôi thấy rằng tất cả các cách ở trên hoạt động tốt và ghi cùng một nội dung để nộp.

Q1: Sự khác biệt với tất cả các cách ở trên là gì?

Q2: Tôi có thể sử dụng NSData theo cách thứ 3 không?

Trả lời

5

Người đầu tiên không cung cấp cho bạn lựa chọn phải làm gì với dữ liệu. Nó sẽ đi đến một tập tin. Ví dụ, tôi sử dụng cách thứ hai để gửi dữ liệu qua kết nối mạng. Nó linh hoạt hơn. Cách thứ ba làm điều tương tự ngoại trừ việc bạn có thể đặt các vật thể vào đó. Tôi không chắc chắn nó sẽ làm việc với một mảng như nó đứng, nhưng nó có thể. Nó thậm chí còn linh hoạt hơn, do đó bạn không cần phải có một mảng hoặc từ điển sẵn sàng cho nó.

Đó là khá nhiều. Đó là tất cả về sự tiện lợi và tính linh hoạt.