2011-01-05 6 views
5

empecé a golpear lejos en mi aplicación y han conseguido manera profunda y que está funcionando muy bien, pero creo que me dejo un poco de materia correr un poco salvaje.¿liberaste todo lo que tienes @property retener @synthesize?

Para cada @property (no atómico, retener) que luego creo un @synthesize para que necesito tener [versión variable] en el método dealloc - ¿es correcto?

Incluso si se trata de una IBOutlet?

+0

+1 para una buena claridad. – gabaum10

+0

@ Joe (o 'copy') –

+0

gracias chicos, creo que finalmente lo hizo a través de mi dura cabeza – Slee

Respuesta

11

Sí. Usted declaró la propiedad del objeto al convertirlo en una propiedad retain, lo que significa que debe renunciar a la propiedad liberándola.

+2

Ver también: http://stackoverflow.com/questions/2189919/how-is-release-handled-for-synthesized -retain-propiedades –

+0

gracias, mi primer programa y tan tan fuera de pista - tienen un montón de propiedades para liberar :) – Slee

+0

es posible que desee echa un vistazo a Accessorizer ... se va a hacer la vida más fácil. http://www.kevincallahan.org/software/accessorizer.html – joshpaul

1

Sí. Si conservas la propiedad, eres responsable de liberarla.

Las propiedades declaradas toman fundamentalmente el lugar de las declaraciones del método de acceso; cuando sintetiza una propiedad, el compilador solo crea los métodos de acceso ausentes. No hay interacción directa con el método dealloc: las propiedades no se liberan automáticamente.

Declared Properties

Por lo general, esto se hace en el método de dealloc.

- (void)dealloc { 
    [property release]; 
    [super dealloc]; 
} 
4

Además, si usted tiene un retenido IBOutlet, debe liberarlo y ponerlo a nil en -viewDidUnload. Eso permite que el objeto libere sus salidas cuando se elimina la vista, particularmente en respuesta a una advertencia de poca memoria. Al establecer el ivar en nil en ese método, se evita el riesgo de doble liberación del ivar si el objeto se desasigna posteriormente.

Cuestiones relacionadas