【问题标题】:How to increment an NSDate如何增加 NSDate
【发布时间】:2010-02-04 22:19:04
【问题描述】:

我正在尝试实现一种将 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];

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

【问题讨论】:

  • 这个项目中的代码:github.com/klazuka/Kal 是我见过的在 Cocoa 中管理日期、月份等方面最好的代码。

标签: iphone objective-c memory-management nsdate


【解决方案1】:

你需要将retain的值赋给displayedMonthYear

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

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

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 2011-08-30
    • 2011-07-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多