ios objective-c swift cocoa-touch parse.com

ios - ¿Qué hace @NSManaged?



objective-c swift (3)

En Apple Docs , para Custom Managed Object Class, citan ejemplos de propiedades como ... Para mí, parece que no hay diferencia, he usado @dynamic en el objetivo C, parece que @NSManaged es el reemplazo en Swift.

Me he encontrado con esta palabra clave en varias ocasiones. Como que sé lo que se supone que debe hacer. Pero realmente quiero una mejor comprensión de eso.

Lo que noté sobre @NSManaged , no se basa en la documentación, sino en el uso repetido:

  1. Magicamente reemplaza la codificación del valor clave.
  2. Es más o menos equivalente a @dynamic en Objective-C (del que no sé mucho)
  3. Lo necesito para subclasificar PFObject desde Parse SDK . Normalmente utiliza KVC para leer / escribir valores desde / hacia el servidor.
  4. Prefijando cualquier variable con @NSManaged se cerrará el compilador cuando no se inicialice dentro del inicializador.

La definición formal (en los datos básicos de Apple Docs):

Core Data proporciona el almacenamiento subyacente y la implementación de propiedades en subclases de la clase NSManagedObject. Agregue el atributo @NSManaged antes de cada definición de propiedad en su subclase de objeto administrado que corresponda a un atributo o relación en su modelo de Datos centrales. Al igual que el atributo @dynamic en Objective-C, el atributo @NSManaged informa al compilador de Swift que el almacenamiento y la implementación de una propiedad se proporcionarán en tiempo de ejecución. Sin embargo, a diferencia de @dynamic, el atributo @NSManaged solo está disponible para la compatibilidad con Core Data.

Lo que obtuve de eso:

Las variables con @NSManaged estarán exentas de verificaciones de tiempo de compilación para algo .

He leído la documentación formal y varias otras preguntas más sobre este asunto:

@synthesize vs @dynamic, ¿cuáles son las diferencias?

¿Cuál es el caso común para el uso de @dynamic?

Instintivamente reconozco algunos escenarios donde debería usarlo. Yo sé parcialmente lo que hace. Pero lo que busco es una comprensión más pura de lo que hace.

Observaciones adicionales:

Un PFObject en el Parse SDK basa en Key Value Coding para acceder a sus valores. El PFObject proporciona los siguientes PFObject :

objectForKey:

let score = results.objectForKey("descriptionOfResult") //returns the descriptionOfResult value from the results object

setObject:forKey:

results.setObject("The results for a physics exam", forKey: "descriptionOfResult") //sets the value of descriptionOfResult

Según entiendo, @NSManaged entiende mágicamente que la variable que he declarado utiliza automáticamente los @NSManaged anteriores para get y set . Me gustaría saber cómo lo hace (si lo que entiendo es verdad) y cualquier otra cosa que haga.


Las respuestas mencionadas arriba son correctas. Aquí está mi entendimiento.

@NSManaged indica que las variables obtendrán algunos valores cuando ejecutemos la aplicación. Coredata crea automáticamente getter y setter para tales accesorios. Silencia el compilador de advertencias.

NSmanaged es la subclase de NSObject. @NSManaged significa que se proporcionará un código adicional a estos accesorios en tiempo de ejecución. Realiza un seguimiento de los cambios realizados en esas propiedades.


Sí, realmente actúa como @dynamic, técnicamente podría ser idéntico incluso. Semánticamente hay una ligera diferencia:

@dynamic dice ''compilador'', no verifique si mis propiedades también están implementadas. Puede que no haya ningún código que puedas ver, pero te garantizo que funcionará en tiempo de ejecución ''

@NSManaged ahora dice ''compilador, no revise esas propiedades ya que tengo Core Data para encargarme de la implementación, estará allí en tiempo de ejecución''

por lo que incluso podría decir: @NSManaged es azúcar sintáctica que es una versión más estrecha de la dinámica :)

https://github.com/KyoheiG3/DynamicBlurView/issues/2
aquí alguien incluso usó @NSManaged sin CD porque quería el comportamiento @dinámica