2010-11-08 19 views
12

He notado una pequeña confusión cuando veo varios trozos de código tanto en libros como en la web cuando se trata de implementar dealloc. Mi pregunta es cuando uso @property. ¿Cuál de los siguientes debería estar usando? Hasta ahora he estado usando VERSION_001.dealloc, ¿usar lanzamiento o establecer en cero para las propiedades?

@property(nonatomic, retain) NSString *name; 
@property(nonatomic, retain) NSString *type; 
@property(nonatomic, retain) NSString *payload; 
@property(nonatomic, retain) NSString *orbit; 

VERSIÓN 001

- (void)dealloc { 
    [name release]; 
    [type release]; 
    [payload release]; 
    [orbit release]; 
    [super dealloc]; 
} 

VERSIÓN 002

- (void)dealloc { 
    [self setName:nil]; 
    [self setType:nil]; 
    [self setPayload:nil]; 
    [self setOrbit:nil]; 
    [super dealloc]; 
} 

Respuesta

17

No hay ninguna diferencia real, a menos que no está utilizando la palabra clave @synthesize. Cuando configura las propiedades en cero, el usuario las libera entre bastidores. Ahora bien, puede haber un ligero aumento en el rendimiento con respecto a la primera versión, porque no es necesario que ocurra mucho detrás de escena (por ejemplo, comparación de punteros y todo lo demás que Apple esconde detrás de escena). Siempre uso la versión 001, porque es más directa y los futuros desarrolladores no tienen que excavar en mi código para descubrir lo que estoy logrando.

+0

Gracias, justo lo que buscaba, muy apreciado. – fuzzygoat

+1

No hay problema, en cualquier momento, simplemente no se olvide de aceptar la respuesta :) –

+3

Una gran ventaja que la versión 1 tiene sobre la versión 2 es que si algún día modifica el setter para una de estas propiedades para hacer un trabajo no trivial, no incurrirá en el rendimiento o el posible comportamiento incorrecto en la versión 1. La versión 2 podría fácilmente provocar que introduzca errores en su código sin darse cuenta algún día en el futuro. – Ryan

Cuestiones relacionadas