2011-10-21 11 views
6

He leído la transición a notas ARC y todavía tengo un poco de confusión acerca de los atributos de propiedades que debemos/podemos usar ... Podemos usar puntos débiles en lugar de asignar (con la ventaja de que la propiedad se establece en nil si el objeto al que apunta se libera), fuerte en lugar de retener y qué en lugar de copiar? Todavía utilizamos la copia solo o necesitamos combinar fuerte con copia, como property (strong,copy) .. Tal vez necesito practicar y leer de nuevo el documento porque ARC no es muy claro para mí ...Nuevos atributos de propiedades ARC

Respuesta

11

El Clang ARC documentation tiene esto que decir:

copia implica __strong la propiedad, así como el comportamiento habitual de la semántica de copia en la incubadora.

En cuanto a los métodos setter costumbre, tiene esto que decir:

la propiedad especificada de una propiedad se conserva en sus metadatos, pero de lo contrario el significado es puramente convencional a menos que la propiedad es sintetizado.

De modo que si implementa sistemas personalizados, usted es responsable de implementar una semántica fuerte o débil en esos sistemas.

+0

Realmente no entiendo cómo puede implementar una semántica fuerte y débil, ya que no usa retener/liberar como en los ajustadores de propiedades retenidas –

+2

Su instalador necesitaría en última instancia almacenar el objeto puntero en una variable calificada con "__strong" o "__weak". Sin embargo, podría hacer otras cosas también, como ejecutar "[self setNeedsDisplay]". –

+0

Entonces, ¿está diciendo que el ivar que almacenará la variable establecida por el colocador debe declararse como __strong o __weak? –

2

La copia es implícitamente fuerte, porque crea una copia y transfiere la propiedad.

Ver esta documentación:

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW18

+0

¿Podemos seguir implementando los métodos setter para propiedades débiles y fuertes? Con las propiedades retenidas implementaste métodos setter liberando el obj anterior y reteniendo el obj pasado al setter ... ¿Qué haces en un método fuerte de establecimiento de propiedades, ya que no tienes que usar retener y liberar más ... Cómo debería ser débil y la implementación de los implementadores de propiedades fuertes difiere con el arco, si elige implementarlos? ¿Tal vez la diferencia es el ivar correspondiente que debe ser débil o fuerte? Disculpe si mis preguntas son triviales ... –

Cuestiones relacionadas