Pregunta

Estoy tratando de poner en práctica un método que va a incrementar una variable de instancia NSDate por un mes. Tengo problemas de gestión de memoria con este. (Estoy usando MallocScribble y NSZombieEnabled, y hacer llegar el mensaje: - [copia CFDate]: mensaje enviado a la instancia 0x3d9dfa0 desasignado)

Mi pregunta se reduce a: ¿cuál es la mejor manera de incrementar una fecha? Aquí está mi código:

NSDate *displayedMonthYear;
....

-(IBAction) nextMonth:(id)sender {

    NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setMonth:1];
    NSDate *prevDate = [displayedMonthYear copy];
    [displayedMonthYear release];
    displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:prevDate options:0];
    [prevDate release];
    [dateComponents release];
    [calendar release];
}

Al principio yo no estaba haciendo el bit con la copia prevDate, pero estaba haciendo algo como:

displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:displayedMonthYear options:0];

Sin embargo, me preocupa que ese enfoque podría perder memoria. Así que supongo que esto es más una cuestión de gestión de memoria que un problema de la fecha, pero cualquier ayuda sería grande -

¿Fue útil?

Solución

Es necesario retain el valor asignado a displayedMonthYear.

No hay tampoco necesidad de utilizar copy. Hay un montón de maneras de hacerlo; He aquí otro ejemplo:

NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top