Come incrementare un NSDate
-
18-09-2019 - |
Domanda
Sto cercando di implementare un metodo che incrementa una variabile di istanza NSDate di un mese. Sto avendo problemi di gestione della memoria con questo. (Sto usando MallocScribble e NSZombieEnabled, e ottenere il messaggio: - [CFDate copia]: messaggio inviato al deallocato esempio 0x3d9dfa0)
La mia domanda si riduce a: qual è il modo migliore per incrementare una data? Ecco il mio codice:
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];
}
In origine non stavo facendo il bit con la copia prevDate, ma stavo facendo qualcosa di simile:
displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:displayedMonthYear options:0];
Tuttavia, ero preoccupato che tale approccio sarebbe una perdita di memoria. Quindi credo che questo è più di un problema di gestione della memoria di un problema di data, ma qualsiasi aiuto sarebbe grande -
Soluzione
È necessario retain
il valore assegnato a displayedMonthYear
.
Non c'è nemmeno bisogno di usare copy
. C'è un sacco di modi per farlo; Ecco un altro esempio:
NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];