2009-11-30 10 views
6

Estoy bastante seguro de que estoy haciendo esto bien, pero solo quería comprobar. Tengo dos variables de instancia que tienen accesores creados a través de @property. En mi dealloc (para el mismo objeto) estoy liberando estos objetos.Liberando variables de instancia @property (copy)?

@property(copy) NSString *firName; 
@property(copy) NSString *surName; 

-(void)dealloc { 
    NSLog(@"_deal: %@", self); 
    [firName release]; 
    [surName release]; 
    [super dealloc]; 
} 

Gary

Respuesta

6

Sí, eso es correcto.

El implementation of the property llamarán release en el valor anterior antes de copiar el nuevo valor, por lo que la única gestión de memoria que tiene que preocuparse es la liberación en el método dealloc, lo que usted está haciendo.

+0

Gracias, muy apreciado. – fuzzygoat

+1

al margen, no podía simplemente usar 'self.firName = nil, self.surName = nil;' –

+0

@Bryan: Sí, podía hacerlo, pero eso es mucho menos legible/mantenible que una llamada 'tener' fácil de entender. –

0

se ve bien. Usualmente uso nonatomic, retain con propiedades de NSString ...

EDIT: copy es.

+2

El OP podría estar garantizando que nadie más modifique un NSString pasado que en realidad es un NSMutableString. –

+0

Es cierto. Aunque si este no es el caso, se debe cambiar para retener, sin necesidad de la copia inútil. – Malaxeur

+1

Hola Ben, sí, la idea era que estaba creando una copia para proteger contra el original, ya sea que se libere o se modifique. – fuzzygoat

0

Eso es correcto. Recuerde la política de propiedad de la memoria. Dado que está utilizando la copia, obtiene la propiedad del objeto como lo haría si utilizó Retener, por lo que se libera cuando termina.

Cuestiones relacionadas