【发布时间】: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