0

我正在尝试实现一种将 NSDate 实例变量增加一个月的方法。我遇到了内存管理问题。(我正在使用 MallocScribble 和 NSZombieEnabled,并收到消息:-[CFDate copy]: message sent to deallocated instance 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];

但是,我担心这种方法会泄漏内存。所以我想这更像是一个内存管理问题而不是日期问题,但任何帮助都会很棒——

4

1 回答 1

0

您需要retain将值分配给displayedMonthYear.

也没有必要使用copy. 有很多方法可以做到;这是另一个例子:

NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];
于 2010-02-04T22:22:07.100 回答