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 -

Foi útil?

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];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top