2009-12-10 12 views
43

Estoy trabajando en mi segunda aplicación para iPhone y tengo curiosidad acerca de Core Data. El tiempo en el proyecto es limitado, como lo es mi tiempo en general.¿Por qué debería usar Core Data para mi aplicación de iPhone?

Soy el único desarrollador y tengo la sensación de que Core Data podría ser útil, pero no puedo explicar claramente por qué.

Disculpe la siguiente ofuscación ... la aplicación necesita recuperar una lista de foos de un servidor central. Los usuarios pueden agregar una barra, de una lista de barras, a los foos, luego agregar un baz de una lista de bazes (!?) a la barra, luego agregar alguna foto y descripción opcional al baz.

Una vez que el usuario está satisfecho con su barra y baz trabajo, entonces presionan un botón de sincronización para cargar sus datos de vuelta al servidor central.

Como puede ver, es una sencilla aplicación de desglose impulsada por datos, pero todavía no estoy seguro de poder justificar el uso de los datos centrales con nuestras limitaciones de tiempo: la curva de aprendizaje parece abrupta.

Si le digo a mi jefe que deberíamos usar Core Data, ¿qué puntos le puedo disparar? Las granadas lógicas también son apreciadas.

+1

nada que agregar a lo que ya se ha dicho, pero quería mencionar: hice esta misma pregunta en otro tiempo. Hoy no puedo imaginarme construir una aplicación sin datos básicos. El modelado de relaciones solo no tiene precio. Vale la pena el problema. –

Respuesta

53

datos básicos ayudará principalmente en los aspectos auxiliares de la aplicación - cosas como la persistencia de datos, presentación, etc. Algunos puntos de la bala para su jefe: logra ahorrar

  • datos básicos y Deshacer la funcionalidad para usted. Tiene una tienda persistente, que rastrea los cambios, y puede enjuagarse en el disco automáticamente en cualquier cantidad de veces (cierre de la aplicación, etc.).
  • Los datos principales y las clases relacionadas proporcionan formas sencillas de obtener sus entidades en UITableViews, como NSFetchedResultsController.
  • Core Data abstrae muchas de las cosas desordenadas que de lo contrario tendría que tratar usted mismo, como listas de objetos, relaciones de uno a muchos o muchos a muchos, o restricciones en los atributos del objeto, en un única interfaz limpia y orientada a objetos.
  • Core Data viene con un bonito editor de modelo de objetos gráficos que puede ayudarlo a pensar en el diseño de su objeto/entidad, y refinarlo sobre la marcha. (También es compatible con la migración, por lo que si más adelante decide que desea diferentes atributos en sus entidades, se puede hacer eso con relativa facilidad.)

Claro, la curva de aprendizaje puede ser un poco caro, pero los ejemplos de Apple son genial para empezar, y la documentación de Core Data es muy completa y útil. Una vez que haya reducido los datos centrales, será muy sencillo crear su aplicación.

+7

Agregue a la lista el hecho de que Core Data en muchos casos puede tener un mejor rendimiento que SQLite en bruto, tanto en la CPU como en la memoria. Usar la recuperación por lotes con NSFetchedResultsController es una línea de código, pero puede generar ganancias de rendimiento significativas. He visto que Core Data supera incluso el código SQLite ajustado a mano en aplicaciones de escritorio, y estoy seguro de que el rendimiento fue una prioridad cuando se lo trajo al iPhone. –

+0

La curva de aprendizaje es definitivamente abrupta y me impide realizar tareas sencillas, como recuperar una lista de productos en autocompletado según los números de código de producto escritos hasta el momento. ¿Algo tan simple como eso requiere el uso de tecnologías de datos centrales o será útil usar SQLite? Solo espero no perder ningún rendimiento al elegir este último. Estoy familiarizado con la codificación del estilo SQL, y habría buscado todos los productos al inicio, y luego habría filtrado los productos con los predicados que muestran el conjunto que comienza con el número de producto ingresado hasta el momento. ¿Es esa la manera de hacerlo? – Pavan

+0

Lo anterior es un requisito de función para una de las aplicaciones que estoy creando, y estoy evitando la necesidad de contactar a un servidor web ya que la autocompletación respondería lentamente, por lo que el almacenamiento local sería la opción viable. ¿Pero cuál es mejor para mis propósitos?Luego presento el escenario 2) para la aplicación número 2, todo lo que haré es almacenar datos biométricos de huellas dactilares localmente en un campo 'blob' x 3000 usuarios registrados, y cuando un usuario desliza su dedo en mi máquina de huellas digitales, la huella digital devuelta necesitará para coincidir con cada plantilla de huella digital guardada en la base de datos. ¿Están los datos centrales mejores aquí o SQLite? – Pavan

1

Tiene un par de opciones diferentes para una tienda local persistente, pero necesitará usar una de ellas de todos modos, ¿por qué no utilizar Core Data?

En cuanto a la curva de aprendizaje, hay aplicaciones en los ejemplos que lo ayudarán aquí. Es bastante sencillo una vez que pasas por las muestras.

-t

7

Para aprovechar CoreData, necesitará conocer una buena cantidad de tecnologías, conceptos y patrones de Cocoa. La curva de aprendizaje no es realmente empinada si sabes estas cosas. Si se ve abrupto, evitaría convertirlo en algo crítico para su proyecto, y luego solo aprendería durante el tiempo de inactividad, y finalmente lo usaría una vez que se sienta cómodo con él. Definitivamente no es una tecnología para principiantes; necesitará una buena base de programación, incluidas las tecnologías y conceptos específicos de Cocoa.Mucha gente lo ve y piensa que será fácil para ellos, porque lo harían, podría obtener mucho gratis. Es como un generador de código, bastante inútil para alguien que lo usa para hacer justamente eso (generar código), en lugar de usarlo hábilmente en respuesta al problema establecido.

2

Todavía estoy en el rango de conocimiento de X-Code 101, pero la primera aplicación que realicé en mi propia base de datos utilizada (después de leer un buen tutorial).

Hay un montón de software repetitivo que viene ya escrito en la plantilla de aplicación vacía, pero la interacción real del programador con la funcionalidad de la base de datos es mínima y directa.

Dale una oportunidad: es más fácil de lo que piensas.

5

En lo que respecta a la curva de aprendizaje, no creo que sea tan malo como piensas. Utilizando las clases de ejemplo de Apple y la plantilla de proyecto CoreData predeterminada, pude tener una aplicación CoreData en funcionamiento (bastante simple, pero no trivial) en una sola tarde, y solo me llevó un par de días jugar con el código antes de tener una muy buena comprensión de lo que eran todas las partes móviles (todo mientras desarrollaba el resto de la aplicación, por lo que no se desperdiciaba tiempo en retoques).

CoreData funciona muy ... lógicamente, supongo, y es increíblemente conveniente. Le ahorra una gran cantidad de gastos generales, y sé que ciertamente me ahorró mucho tiempo escribiendo esa aplicación. La pequeña inversión inicial en el aprendizaje de la nueva tecnología valió la pena a largo plazo, ahora que tengo una herramienta tan poderosa en mi funda.

1

Un objeto gestionado de Core Data puede tener todos sus datos guardados en la base de datos y solo se hace referencia como ID en la memoria. Por lo tanto, Core Data puede ahorrar mucha memoria, especialmente cuando tiene muchos datos de modelos. Una vez que utilice los datos centrales ya no tendrá que preocuparse por los problemas de la memoria de datos del modelo.

+0

No estoy seguro exactamente de lo que está tratando de decir con esta respuesta, pero tal vez debería hablar sobre los mecanismos de fallas de Core Data. Eso es más poderoso que simplemente afirmar que una búsqueda solo devuelve ID de objeto. Definitivamente debe preocuparse por los problemas de memoria porque puede crear fuertes ciclos de referencia en los datos centrales si accede a la relación inversa en un managedObject. Es por eso que existe el método refreshObject: mergeChanges: –

0

Las otras respuestas aquí hacen un buen trabajo explicando por qué podría usar datos básicos, pero como su curva de aprendizaje parece ser una preocupación común, podría ser útil para quienes tropiecen con esta pregunta saber que hay una alternativa con una curva de aprendizaje considerablemente "menos empinada": Realm.

Aquí es un breve mensaje Quora sobre por qué usted podría considerar reino sobre la base de datos: https://www.quora.com/Why-would-you-use-Realm-over-Core-Data

Cuestiones relacionadas