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 -

È stato utile?

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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top