Dipende dal tipo di dati che si desidera salvare e se lo si utilizzerà solo internamente o si deve scambiare i dati con un servizio esterno.
NSCoding è in genere un serializzatore di dati. Un sacco di oggetti built-in implementa il protocollo NSCoder che consente di salvarli come flusso binario (file, in un BLOB di un sqlite, ecc.) NSKeyedArchiver offre il vantaggio di cercare in tali flussi in base a un'etichetta stringa , un po 'come un dizionario ma puoi usare solo le stringhe come chiavi. Questo approccio è utile se occasionalmente si devono mantenere alcuni oggetti di classi diverse.
Tuttavia, se si dispone di molti oggetti della stessa classe di, sarete meglio andare per un database-approccio, SQLite o CoreData. CoreData è praticamente un wrapper su SQLite che facilita molto la progettazione del tuo modello dati, e fa le query al DB dietro le quinte, senza la necessità di scrivere istruzioni SQL. In CoreData definisci le tue classi e ogni istanza della classe può essere persistente, cioè puoi recuperare i valori dei membri dell'oggetto senza averli sempre nella memoria. Questo è un modo molto conveniente per memorizzare molti dati strutturati. Ad esempio se si scrive un browser Web, è possibile memorizzare i segnalibri dell'utente con il nome, l'URL e forse l'ultima ora visitata.
Per XML e JSON non vi sono particolari vantaggi se si utilizzano i dati solo localmente sul dispositivo. Se è necessario comunicare con un servizio esterno, è possibile prendere in considerazione la possibilità di memorizzare/salvare in cache gli oggetti XML/JSON così come sono per un uso futuro. Un altro approccio sarebbe quello di rigenerare questi dati dalle strutture dati interne (vedi sopra) ogni volta che ne avete bisogno.
Se progettate voi stessi il vostro modello di dati, vedo ancora meno punti per usare i plists, ma forse qualcuno mi correggerà.
MODIFICA: aggiungo qui un breve riferimento di riferimento per esercitazioni su come utilizzare NSCoding, Core Data e come bonus, SQLite.
AGGIORNAMENTO 12.01.2016: Se stai cercando soluzioni di persistenza, ti suggerisco di dare un'occhiata allo Realm.
Possibili duplicati: http://stackoverflow.com/questions/4989609 http://stackoverflow.com/questions/840634 –
la cosa è sqlite è considerata all'interno di coredata. E il primo link che hai suggerito, parla specificamente di sqlite3 vs nscoding; con non molte risposte. Sto facendo una domanda più generale. Perché ci sono così tante opzioni per gestire i dati. – LolaRun