estoy leyendo a través del libro de Big Nerd Ranch en la programación iOS y que tenía una pregunta sobre el programa Hypnotime crean en el capítulo 7.iOS gestión de memoria básica
En algún momento, que poner en práctica el método siguiente:
- (void)showCurrentTime:(id)sender
{
NSDate *now = [NSDate date];
static NSDateFormatter *formatter = nil;
if (!formatter) {
formatter = [[NSDateFormatter alloc] init];
[formatter setTimeStyle:NSDateFormatterShortStyle];
}
[timeLabel setText:[formatter stringFromDate:now]];
}
Mi pregunta es acerca de NSDateFormatter *formatter
. El formateador se crea con alloc
y init
. Siempre supe que cualquier cosa con alloc
necesita ser lanzada en algún lado, ¿verdad? Cuando formatter
pasa a timeLabel
, no lo envía a timeLabel
retain
? Y no puedo (¿no debería?) Posteriormente, lancé formatter
?
he echado un vistazo a través del código en el próximo par de páginas y no puedo encontrar ningún mensaje de liberación en cualquier lugar, a excepción de un release
siendo enviar a timeLabel
en dealloc
.
¿Estoy mezclando cosas aquí? ¿Hay alguna razón por la cual formatter
no deba ser revelada por mí? Quiero ser un buen ciudadano de la memoria. Se agradece cualquier ayuda :)
Gracias por el consejo. Si se mantiene activo durante toda la vida útil de la aplicación, ¿significa eso que debería liberarlo en dealloc o no liberarlo? Un poco confundido acerca de esto, para ser honesto. – cabaret
No, no está diseñado para ser liberado y no creará una pérdida de memoria a menos que asigne el formateador nuevamente sin soltarlo primero. Es por eso que hay un cheque si. – Joe
De acuerdo, creo que lo entiendo. Muchas gracias. – cabaret