¿Cuándo debo usar los diversos mecanismos de almacenamiento en iOS?

Pensé que esto ya estaría cubierto, pero mi búsqueda no obtuvo nada de relevancia.

Soy consciente de que hay NSUserDefaults, Core Data, archivado de objects, SQLite sin formatting, plists y, por supuesto, almacenamiento por serveres web. Lo que no está claro y algo turbio para un principiante es cuándo emplear cada una de estas diversas herramientas.

Los usos de los serveres web vs Core Data son evidentes, pero ¿qué pasa con NSUserDefaults vs plists? Core Data vs archivado de objects? Un desglose simple de los casos de uso realmente me ayudaría a entender por qué hay tantas opciones de almacenamiento en iOS.

Intento escribir una list rápida y simple de casos de uso común, porque como @rmaddy dice que esta respuesta podría llenar un capítulo del libro:

  • NSUserDefaults : almacena preferences de usuario simples, nada demasiado complejo o seguro. Si su aplicación tiene una página de configuration con algunos conmutadores, puede save los datos aquí.

  • Keychain (consulte SSKeychain para un gran contenedor): se utiliza para almacenar datos confidenciales, como cnetworkingenciales.

  • PLists : se utiliza para almacenar datos estructurados más grandes (pero no enormes): es un formatting muy flexible y se puede usar en una gran cantidad de escenarios. Algunos ejemplos son:

    • Almacenamiento de contenido generado por el usuario: una simple list de Geopoint que se mostrará mediante un map o una list.
    • Proporcione datos iniciales simples a su aplicación: en este caso, la pluma se includeá en NSBundle, en lugar de ser generada por el usuario y rellenada por los datos del usuario.
    • Separe los datos necesarios para un module particular de su aplicación de otros datos. Por ejemplo, los datos necesarios para crear un tutorial de inicio paso a paso, donde cada paso es similar a los demás, pero solo necesita datos diferentes. La encoding de estos datos fácilmente podría llenar su código, por lo que podría ser un mejor desarrollador y usar plists para almacenar los datos y leerlos en su lugar.
    • Está escribiendo una biblioteca o marco que podría ser configurado de alguna manera por el desarrollador que lo usa.
  • Object archiving podría ser útil para serializar objects más complejos, tal vez llenos de datos binarys, que no puedan (o que no deseen) ser mapeados en estructuras más simples como plists.

  • Core Data es potente, puede ser respaldado por diferentes almacenes persistentes (SQLite es solo uno de ellos, ¡pero también puede elegir files XML o incluso puede escribir su propio formatting!) Y proporciona relaciones entre los elementos. Es complejo y ofrece muchas características útiles para el desarrollo, como KVO y contexts. Debe usarlo para grandes sets de datos de muchos loggings correlacionados, que un server podría generar o proporcionar a los usuarios.

  • Raw SQLite es útil cuando necesita acceso real y realmente rápido a una fuente de datos relacional (Core Data introduce algunos gastos indirectos), o si necesita soportar el mismo formatting SQLite en múltiples plataforms (nunca debe meterse con SQLite interno CoreData: usa su propio formatting, por lo que no puede simplemente "importar" un SQLite existente en CoreData). Por ejemplo, para un proyecto para el que trabajé, un service web me proporcionó un gran SQLite en lugar de jsons o xmls: algunos de este SQLite se importaron a CoreData (operación que podría tomar un time, según el tamaño de fuente), porque necesitaba todos las características de la misma, mientras que otras SQLites fueron leídas directamente para un acceso realmente rápido.

  • Webserver storage server Webserver storage debería ser obvio: si necesita almacenar datos en un server, es porque el dispositivo no debería ser el único propietario de esos datos. Pero si solo necesita sincronizar la misma aplicación en diferentes dispositivos iOS (o incluso con una versión de Mac de la aplicación), también podría ver el almacenamiento de iCloud.

    Intereting Posts