Como incrementar um NSDate
-
18-09-2019 - |
Pergunta
Eu estou tentando implementar um método que irá incrementar uma variável de instância NSDate por um mês. Estou tendo problemas de gerenciamento de memória com este. (Estou usando MallocScribble e NSZombieEnabled, e recebendo a mensagem: - [cópia CFDate]: mensagem enviada a instância 0x3d9dfa0 desalocada)
A minha pergunta se resume a: o que é a melhor maneira de incrementar uma data? Aqui está o meu 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];
}
Inicialmente eu não estava fazendo a pouco com a cópia prevDate, mas estava fazendo algo como:
displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:displayedMonthYear options:0];
No entanto, eu estava preocupado que essa abordagem iria vazar memória. Então eu acho que esta é mais uma questão de gerenciamento de memória do que uma questão data, mas qualquer ajuda seria ótimo -
Solução
Você precisa retain
o valor atribuído à displayedMonthYear
.
Também não há necessidade de uso copy
. Há muitas maneiras de fazer isso; Aqui está outro exemplo:
NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];