Question

Je suis en train de mettre en œuvre une méthode qui incrémente une variable d'instance NSDate d'un mois. Je vais avoir des problèmes de gestion de mémoire avec cela. (J'utilise MallocScribble et NSZombieEnabled, et faire passer le message: - [copie CFDate]: message envoyé à 0x3d9dfa0 instance désallouées)

Ma question se résume à: quelle est la meilleure façon d'augmenter une date? Voici mon code:

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];
}

Au départ, je ne faisais pas le bit avec la copie prevDate, mais il a été en train de faire quelque chose comme:

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

Cependant, je craignais que cette approche serait une fuite de mémoire. Donc, je suppose que cela est plus d'un problème de gestion de la mémoire que d'une question de date, mais toute aide serait génial -

Était-ce utile?

La solution

Vous devez retain la valeur attribuée à displayedMonthYear.

Il y a aussi pas besoin d'utiliser copy. Il y a beaucoup de façons de le faire; voici un autre exemple:

NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top