Как увеличить NSDate - PullRequest
       8

Как увеличить NSDate

0 голосов
/ 05 февраля 2010

Я пытаюсь реализовать метод, который будет увеличивать переменную экземпляра NSDate на один месяц. У меня проблемы с управлением памятью с этим. (Я использую MallocScribble и NSZombieEnabled и получаю сообщение: - [копия CFDate]: сообщение отправлено освобожденному экземпляру 0x3d9dfa0)

Мой вопрос сводится к тому, как лучше всего увеличить дату? Вот мой код:

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

Первоначально я не делал бит с копией prevDate, но делал что-то вроде:

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

Однако меня беспокоило, что такой подход может привести к утечке памяти. Так что я думаю, что это больше проблема управления памятью, чем проблема с датой, но любая помощь будет отличной -

1 Ответ

0 голосов
/ 05 февраля 2010

Вам необходимо retain значение, присвоенное displayedMonthYear.

Также нет необходимости использовать copy. Есть много способов сделать это; вот еще один пример:

NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];
...