iphone - objective - ios 12 core data
¿Debo guardar en plist o Core Data? (3)
Me pregunto si debería guardar los datos de mi aplicación en un plist o usar Core Data ...
Mi aplicación básicamente está guardando tweets de la línea de tiempo y otros usuarios ahora. Que es menos de unos pocos kilobytes kB (aproximadamente 200 kb en mi prueba). ¿Cuáles son las ventajas de usar datos centrales?
Como ya se señaló, escribir en un plist y leer de un plist es casi trivial usando NSDictionary. Entonces esa podría ser una buena forma de comenzar.
Dicho esto, si su modelo de datos comienza a enriquecerse con atributos y relaciones adicionales, Core Data proporcionará una mejor escala y un mejor soporte. Xcode hace que sea muy fácil diseñar su modelo de objeto (esquema) e incluso generará archivos fuente, en caso de que decida subclase NSManagedObject (que casi siempre hago).
En pocas palabras: Plist te pondrá en funcionamiento más rápido; Core Data le dará mucho poder cuando llegue el momento.
No consideraría los plists para nada más que guardar preferencias simples y una estructura de datos realmente básica. Además, en cuanto a rendimiento, recuperar y guardar datos en listas puede ser bastante lento.
Después de luchar con Coredata durante mucho tiempo, ahora que finalmente lo tengo, lo elegiría sobre cualquier cosa cualquier día. Sí, tiene un poco de una curva de aprendizaje abrupta, pero hay tanto que obtienes "gratis" con él, definitivamente invertiría el tiempo para aprender y explorarlo.
Coredata le dará la flexibilidad de expandir sus modelos de objetos según sea necesario, buscar objetos fácilmente desde el almacenamiento persistente basado en ciertos parámetros, crear relaciones entre modelos, administrar la memoria y la lista continúa.
Coredata está muy bien documentado por Apple, por lo que encontrará todo lo que necesita para comenzar y más. Hay ejemplos, ejemplos de proyectos, videos, lo que sea, así que definitivamente recomendaría que eche un vistazo SI le interesa el rendimiento, la escalabilidad y también un poco de diversión :)
solo algunos consejos que podrían ayudar en el diseño de su aplicación.
En primer lugar, sería bueno subrayar que CoreData no es realmente comparable con plist. Lo que quiero decir es que CoreData es como una capa de abstracción del modelo de datos sobre su almacenamiento de datos que le permite administrar las relaciones y obtener reglas entre las diferentes entidades de datos. Detrás de la capa CoreData, su almacenamiento de datos podría basarse en plist (solo osx), base de datos sqlite u objeto binario.
Esto también es importante porque lo ayuda a comprender el alcance de CoreData: si necesita mantener una relación lógica entre diferentes entidades de datos o realizar múltiples consultas sobre los mismos datos o serializar / deserializar estructuras de big data, CoreData proporciona la mejor y más rápida solución para hacer eso pasa. Si solo necesita almacenar una lista simple de elementos que solo necesitan mostrarse, un rebote de un archivo plist debería ser suficiente.
Otro punto de decisión importante es el tipo de datos que necesita almacenar: según Apple, los archivos plist están optimizados para cadenas, números, fechas y algunos datos binarios. Esto es lo que Apple dice sobre plist:
Note that property lists should be used for data that consists primarily of strings and numbers. They are very inefficient when used with large blocks of binary data.
Many applications require a mechanism for storing information that will be needed at a later time. For situations where you need to store small amounts of persistent data — say less than a few hundred kilobytes — property lists offer a uniform and convenient means of organizing, storing, and accessing the data.
Significa que si necesita almacenar cosas "pesadas" u objetos complejos y administrarlos (como buscar a través de ellos), el sistema de almacenamiento en caché del analizador plist podría ser ineficiente (sobre todo en iOS).
En mi opinión, su idea de almacenar alrededor de 200k de tweets lineales (¿alrededor de 1000 tweets?) De una línea de tiempo funcionará bien con una solución basada en plist. También considere que el analizador plist se acelera fuertemente con una estructura de datos pequeña, entonces tendrá un mejor rendimiento y menos uso de memoria (principalmente durante el inicio) porque no necesita inicializar CoreData ni ningún otro "envoltorio de código" alrededor de su almacenamiento de datos. Solo un simple uso sobre la marcha de NSDictionary
, NSArray
, etc.
Por último, pero no menos importante, la implementación plist es lo suficientemente barata como para darle la posibilidad de avanzar en CoreData en un siguiente paso.
Lo que quiero decir es que a veces no es necesario usar un tanque si necesitas atrapar algunas moscas :-)
Espero que esto ayude. Ciao!