Pregunta

Tengo el siguiente código a continuación que está destinado a cambiar una var clase llamada "hoy" delante o hacia atrás por un día. Se trabajará una vez, pero después de eso se bloquea. Se hará lo mismo no importa si presiono el botón izquierdo o el botón derecho. ¿Qué estoy haciendo mal?

var var hoy es una clase que inició hoy .. = [fecha NSDate]

Este es el método que se estrella:

 (IBAction)changeDateByOne:(id)sender{

NSDate *newDay;
NSDate *currentDay = today;

NSTimeInterval secondsPerDay = 24 * 60 * 60;

if(sender == leftButton){
     newDay = [currentDay addTimeInterval:-secondsPerDay];

}else if(sender == rightButton) { 
     newDay = [currentDay addTimeInterval: secondsPerDay];


}

today = newDay;

}

¿Fue útil?

Solución

No sólo se necesita para conservar la fecha creada, pero también es necesario para liberar el valor existente en poder de "hoy", de lo contrario tendrá fugas El viejo referencia.

Al inicializar la instancia, utilice:

today = [[NSDate date] retain];

Me gustaría cambiar la última línea a:

[today release];
today = [newDay retain];

Y, por último, en su método dealloc, añadir:

[today release];

antes de llamar [súper dealloc];

Otros consejos

Es necesario leer la documentación de gestión de memoria. Eso es aquí:

http://developer.apple.com /iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

Si va a añadir o restar días, es posible que desee leer esto que es una forma alternativa de hacer la misma cosa:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1

Por último, si algo falla, a menudo es útil observar las huellas de la espalda (e incluirlos en sus preguntas si no puede resolverlo por sí mismo). errores de gestión de memoria son por lo general el problema si ves objc_msgSend (o uno de sus compañeros) en la traza.

Tal vez lo que necesita decir

today = [[NSDate date] retain]

Creo que es necesario para retener el objeto de regresar de newDay el método addTimeInterval. También puede ser necesario para liberar hoy antes de hacer la asignación al final.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top