¿Hay algún problema al usar self.property = nil en dealloc?
Sé que la propiedad declarada genera un método de acceso que de alguna manera es solo sintaxis de azúcar.
Encontré que mucha gente usaself.property = nil
en sudealloc
método.
1) En @ de AppGestión de la memori documento, p23 Dice:
Los únicos lugares donde no debe usar métodos de acceso para establecer una variable de instancia son los métodos init y dealloc.
¿por qué no debería?
2) En Apple's Objective-C 2.0, p74
Las propiedades declaradas ocupan fundamentalmente el lugar de las declaraciones de métodos de acceso; cuando sintetiza una propiedad, el compilador solo crea métodos de acceso ausentes. No hay interacción directa con ladealloc
étodo @: las propiedades no se liberan automáticamente. Sin embargo, las propiedades declaradas proporcionan una forma útil de verificar la implementación de sudealloc
étodo @: puede buscar todas las declaraciones de propiedad en su archivo de encabezado y asegurarse de que las propiedades del objeto no estén marcadas conassign
Se liberan y las marcadas conassign
No se publican.
Nota: normalmente en unadealloc
método que deberíasrelease
variables de instancia de objeto directamente (en lugar de invocar un conjunto de acceso y pasarnil
como parámetro), como se ilustra en este ejemplo:
- (void)dealloc { [property release]; [super dealloc]; }
Si está utilizando el tiempo de ejecución moderno y sintetizando la variable de instancia, sin embargo, no puede acceder a la variable de instancia directamente, por lo que debe invocar el método de acceso:
- (void)dealloc { [self setProperty:nil]; [super dealloc]; }
¿Qué significa la nota?
Encontré[property release];
y[self setProperty:nil];
ambos trabajan