Tùy thuộc vào loại dữ liệu bạn muốn lưu và bạn chỉ sử dụng dữ liệu đó trong nội bộ hay bạn phải trao đổi dữ liệu với dịch vụ bên ngoài.
NSCoding thường nói trình nối tiếp dữ liệu. Rất nhiều đối tượng dựng sẵn thực hiện giao thức NSCoder cho phép bạn lưu chúng dưới dạng luồng nhị phân (tệp, trong BLOB của sqlite, v.v.) NSKeyedArchiver cung cấp cho bạn dấu cộng trong tìm kiếm trong các luồng dựa trên nhãn chuỗi , giống như một từ điển nhưng bạn chỉ có thể sử dụng các chuỗi làm khóa. Cách tiếp cận này là tốt nếu bạn thỉnh thoảng phải tồn tại một số đối tượng của các lớp khác nhau.
Tuy nhiên, nếu bạn có nhiều đối tượng của cùng một lớp, bạn sẽ tốt hơn đi tiếp cận cơ sở dữ liệu, SQLite hoặc CoreData. CoreData thực tế là một trình bao bọc xung quanh SQLite giúp giảm bớt rất nhiều thiết kế mô hình dữ liệu của bạn và thực hiện các truy vấn tới DB phía sau màn cửa mà không cần phải viết các câu lệnh SQL. Trong CoreData bạn định nghĩa các lớp của bạn, và mỗi thể hiện của lớp có thể được duy trì, tức là bạn có thể lấy lại các giá trị của các thành viên của đối tượng mà không cần chúng luôn trong bộ nhớ. Đây là một cách rất thuận tiện để lưu trữ rất nhiều dữ liệu có cấu trúc. Ví dụ: nếu bạn viết trình duyệt web, bạn có thể lưu trữ dấu trang của người dùng bằng tên, URL và có thể là lần truy cập cuối cùng.
Đối với XML và JSON, không có lợi thế cụ thể nào nếu bạn chỉ sử dụng dữ liệu cục bộ cho thiết bị. Nếu bạn phải giao tiếp với một số dịch vụ bên ngoài, bạn có thể xem xét lưu vào bộ nhớ cache/lưu các đối tượng XML/JSON khi chúng được sử dụng sau này. Cách tiếp cận khác sẽ là tạo lại dữ liệu này từ các cấu trúc dữ liệu nội bộ của bạn (xem ở trên) mỗi lần bạn cần nó.
Nếu bạn tự mình thiết kế mô hình dữ liệu của mình, tôi sẽ thấy ít điểm hơn để sử dụng các cuộn dây, nhưng có thể ai đó sẽ sửa tôi.
EDIT: Tôi thêm vào đây một tham chiếu liên kết ngắn để biết hướng dẫn về cách sử dụng NSCoding, Core Data và làm tiền thưởng, SQLite.
CẬP NHẬT 12.01.2016: Nếu bạn đang tìm giải pháp kiên trì, tôi khuyên bạn cũng nên xem Realm.
Các bản sao có thể có: http://stackoverflow.com/questions/4989609 http://stackoverflow.com/questions/840634 –
điều là sqlite được coi là bên trong coredata. Và liên kết đầu tiên bạn đề xuất, nói về cụ thể sqlite3 vs nscoding; không có nhiều câu trả lời. Tôi đang hỏi một câu hỏi tổng quát hơn. Tại sao có quá nhiều tùy chọn để xử lý dữ liệu. – LolaRun