sábado, 14 de marzo de 2015

Conceptos de Core Data

Vamos a ver algunos de los conceptos más importantes relacionados con Core Data.

 Lo primero, ¿que es Core Data? Core Data es un framework que permite trabajar con tus datos como si fueran objetos, independientemente de cómo están almacenados en disco. Se situa entre tu aplicación y un persistent store, que es el término genérico para un fichero de datos, el cual puede ser una base de datos SQLite, un fichero XML o un almacen binario. A estos ficheros se les llama persistent por que permanecen a pesar de que cierres la aplicación, reinicies el dispositivo, etc.

Core Data utiliza un Managed Object Model para configurar los datos de tu aplicación utilizando un object graph. Cada objeto del object graph se llaman entity. Una vez que tienes definidos managed objects, se puede manipular nativamente en Objective-C sin necesidad de utilizar SQL (o cualquier otro tipo de tratamiento de un persistent store).

En la siguiente imagen vemos un object graph muy simple con dos entidades Client y Purchase. Como veis, es similar a un esquema de base de datos, en donde las entities serían las tablas.

Fig. 1


Un managed object contiene una copia de datos de un persistent store. Si tu persistent store es una base de datos, un managed objet representaría una fila de una tabla de la base de datos. Un managed object es una instancia de NSManagedObject, aunque usualmente es una instancia de una subclase de NSManagedObject.

Todos los managed objects existen en un managed object context, que existe en memoria RAM. De esta manera se accede a los datos que han sido previamente leidos de disco de una manera muy rápida sin necesidad de estar continuamente accediendo a disco. El managed object necesitará llamar a save: para escribir los cambios en disco.

En la imagen Fig.2 se ilustra como encajan las piezas principales de Core Data:

Fig. 2

En Fig.2, el Persistent Store Coordinator se muestra conteniendo un persistent store con filas de una tabla. Cuando se configura un persistent store coordinator, normalmente se elige una base de datos SQLite como persistent store. Un persistent store coordinator puede tener varios persistent store. Por ejemplo, cuando Core Data se integra con iCloud, poniendo datos que no pertenecen a iCloud en un persistent store y los que si pertenecen en otro, se optimiza el ancho de banda y el espacio de almacenamiento usado en iCloud. Se utilizan instancias de NSPersistentStore y NSPersistentStoreCoordinator para crear persistent stores y persistent store coordinators respectivamente.

En el medio de Fig.2 se representa en el medio el Managed Object Model. Es la representación gráfica de la estructura de datos. Las entities no contienen datos, solo definen las propiedades que tienen los managed objects basados en ellas. Un managed object model se crea mediante una instancia de NSManagedObjectModel.

Finalmente, en la derecha de la Fig. 2 se muestra el managed object context que se encarga de gestionar el ciclo de vida de los managed objects incluidos en él y proporciona características para hacer fetch de los datos, validaciones y seguimiento de los cambios. También se pueden definir varios managed object context, lo cual se utiliza sobre todo para realizar procesamiento en background, como salvar o importar datos. Para crearlo se instancia NSManagedObjectContext.

@Fin

No hay comentarios:

Publicar un comentario