Trabajar con datos en aplicaciones de iOS (qué elegir? NSData, CoreData, sqlite, PList, NSUserDefaults)

cuando desarrollo una aplicación de iPhone (Time Tracker, ToDoList, etc.) nunca sé cuál es la mejor manera de manejar los datos. Una vez que utilicé un plist, la próxima vez sqlite o CoreData.

¿Cómo decides cuál es el mejor para tu proyecto? (Solo hablamos de gestión de datos)

Por ejemplo, si quieres desarrollar:

  • Aplicación Time Tracker> ¿Es PList tu elección?
  • Aplicación RSS Reader> CoreData?
  • Aplicación de fotos> sqlite?
  • EMail Client>?

Para un principiante, ¿puedes señalarme aproximadamente a las direcciones correctas? (Sé que depende mucho de la aplicación y de lo que quieras hacer con ella, pero cualquier pensamiento te ayudará)

Estoy lejos de desarrollar aplicaciones complicadas, todavía son bastante simples.

Gracias por ayuda, Marc

Puede usar estas reglas generales para decidir qué modelo de almacenamiento funcionará para su aplicación.

  • Si los datos encajan completamente en la memoria y están relativamente desestructurados, use plist
  • Si los datos encajan en la memoria por completo y tienen una estructura arborescente, use XML
  • Si los datos no se ajustan a la memoria y tienen una estructura de gráfico, y la aplicación no necesita capacidades de consulta extraordinarias, utilice los datos centrales.
  • Si los datos no se ajustan a la memoria, tienen una estructura compleja o la aplicación se beneficia de poderosas capacidades de consulta provistas por las bases de datos relacionales, use sqlite
  • Si los datos deben ser secretos (por ejemplo, una contraseña), use el llavero .

Tenga en cuenta que estas opciones a menudo se superponen, ya que los modelos de almacenamiento múltiple se adaptarán a la misma aplicación. Su decisión final depende de sus preferencias personales: elige una tecnología que comprenda mejor.

Hubo una muy buena pregunta sobre sqlite vs. Core Data en Stack Overflow, es posible que desee leer las respuestas a esa pregunta.

Mi regla de oro para cada uno de ellos sería:

  • Aplicación Time Tracker> Datos principales
  • Aplicación de lector RSS> Datos principales
  • Aplicación de fotografía> Datos principales
  • EMail Client> Datos principales

Aunque en cada caso habría cosas que almacenarías en el sistema de archivos. Por ejemplo, la aplicación de fotos obviamente pondría las fotos reales en el sistema de archivos. El texto de los correos electrónicos estaría en el sistema de archivos, etc. Los mensajes RSS reales también pueden ser archivos de texto, pero con metadatos en objetos de Datos centrales.

En algún momento, es posible que descubra que los datos que está almacenando superan la escalabilidad de Core Data. En ese momento consideraría mudarse a SQLite.

El punto es que Core Data es tan fácil de usar y tan superior a las supuestas alternativas más livianas, ¿por qué no lo usarías?