2010-09-21 16 views
8

Miro las guías de datos principales, y hay dos formas de obtener una nueva instancia de NSManagedObject.Acerca de obtener un nuevo objeto NSManagedObject

  • - initWithEntity: insertIntoManagedObjectContext: de clase NSManagedObject
  • + insertnewObjectForEntityForName: inManagedObjectContext: de clase NSEntityDescription

¿Hay alguna diferencia entre los dos métodos? O solo significan lo mismo para obtener un NSManagedObject nuevo bajo cualquier condición.

Respuesta

7

Según lo que se dice en la documentación, al usar el método de clase NSEntityDescription para crear instancias del NSManagedObject, es posible hacerlo sin declarar/importar su encabezado. Al establecer el nombre de la clase, obtendrá una "instancia completamente configurada" del objeto.

Es útil en las primeras etapas de desarrollo cuando las cosas cambian constantemente, pero puede ser un factor de riesgo ya que no obtiene ningún error de compilación o advertencias si escribe mal el nombre de su clase, ya que es una cadena.

El método de NSManagedObject necesita que la interfaz de la clase específica importada a su archivo, y lo haga más robusto contra errores, ya que el compilador puede verificar si esa clase existe.

Por ejemplo, tendrán el mismo resultado, devolverán una instancia de la clase especificada. Aunque los recuentos de retener serán diferentes:

- initWithEntity:insertIntoManagedObjectContext: (retener recuento == +1)

+ insertnewObjectForEntityForName:inManagedObjectContext: (retener recuento == 0)

Aquí está la documentación

NSEntityDescription Class Reference (insertNewObjectForEntityForName:inManagedObjectContext:)

Valor devuelto

Una nueva instancia de la clase llamada entityName, totalmente autorrealizada y configurada por completo. La instancia tiene su descripción de entidad establecida y se inserta en su contexto.

Discusión

Este método hace que sea fácil para usted para crear instancias de una entidad determinada sin tener que preocuparse acerca de los detalles de la creación de objeto gestionado.

El método es particularmente útil en Mac OS X v10.4, ya que puede usarlo para crear un nuevo objeto gestionado sin tener que conocer la clase utilizada para representar a la entidad. Esto es especialmente beneficioso al principio del ciclo de vida de desarrollo cuando las clases y los nombres de las clases son volátiles.

En Mac OS X v10.5 y posterior y en iOS, puede utilizar initWithEntity: insertIntoManagedObjectContext: que devuelve una instancia de la clase adecuada para la entidad.

NSManagedObject Class Reference (initWithEntity:insertIntoManagedObjectContext:)

Valor de retorno

Un inicializar instancia de la clase apropiada para la entidad.

Discusión

NSManagedObject utiliza la generación de clase dinámica para apoyar el objetivo-C 2 Propiedades de la característica (véase “propiedades declaradas”) mediante la creación automática una subclase de la clase apropiada para entity.initWithEntity: insertIntoManagedObjectContext: por lo tanto, rendimientos una instancia de la clase apropiada para la entidad. La subclase generada dinámicamente se basará en la clase especificada por la entidad, por lo que la especificación de una clase personalizada en su modelo sustituirá a la clase transferida a alloc.

Si el contexto no es nulo, este método invoca [context insertObject: self] (que hace que se invoca awakeFromInsert).

Se le recomienda no anular este método; en su lugar, debe anular awakeFromInsert y/o awakeFromFetch (si hay una lógica común a estos métodos, debe tenerse en cuenta en un tercer método invocado por ambos). Si realiza la inicialización personalizada en este método, puede causar problemas con las operaciones de deshacer y rehacer.

En muchas aplicaciones, no hay necesidad de asignar posteriormente un objeto gestionado recién creado a una tienda particular-see assignObject: toPersistentStore :. Si su aplicación tiene varias tiendas y necesita asignar un objeto a una tienda específica, no debe hacerlo en el método de inicialización de un objeto gestionado. Tal asignación es controladora, no lógica a nivel de modelo.

+0

Muchas gracias. – AechoLiu

Cuestiones relacionadas