Pregunta

He estado leyendo eso si tengo algo como esto:

@property (nonatomic, assign) UIView *anView;

Entonces no tengo que preocuparme por la administración de la memoria. No tengo que hacer [anView release] en el método -dealloc.

¿Por qué?

" asignar " simplemente le dice al compilador: "Hey hombre, esta propiedad no retiene lo que alguien le asigna". Y luego puedes hacerlo

@synchronize anView;

y el compilador crea mágicamente un getter y setter, donde el setter puede verse así:

- (UIView*) anView {
    return anView;
}

y el Setter puede parecer:

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

correcto / incorrecto? Si eso fue correcto, el colocador no reclama la propiedad de la nueva variable AnView, ya que no es un " retener " propiedad. Simplemente lo toma y lo asigna a la variable de instancia. Por lo tanto, al considerar la política de propiedad, no es necesario liberar la variable de instancia anView en -dealloc. El objeto no lo posee. ¿Es eso correcto?

¿Fue útil?

Solución

Sí, básicamente eres correcto. Supongamos que el recolector de basura está apagado (de lo contrario no importa).

Al usar las propiedades 'asignar', no tiene que liberar el objeto porque nunca lo retuvo (es responsabilidad de otra persona).

Esencialmente, esto crea una referencia débil: una vista puede ser desasignada mientras la propiedad aún lo apunta. Normalmente, usaría 'asignar' para tipos de datos primitivos, no para objetos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top