NSDate问题

时间:2009-06-14 04:07:19

标签: iphone objective-c nsdate

我在下面有以下代码,用于将名为“今天”的类var向前或向后更改一天。它会工作一次,然后崩溃。无论我按下左按钮还是右按钮,它都会做同样的事情。我做错了什么?

今天的var是一个类var,发起为.. today = [NSDate date]

以下是崩溃的方法:

 (IBAction)changeDateByOne:(id)sender{

NSDate *newDay;
NSDate *currentDay = today;

NSTimeInterval secondsPerDay = 24 * 60 * 60;

if(sender == leftButton){
     newDay = [currentDay addTimeInterval:-secondsPerDay];

}else if(sender == rightButton) { 
     newDay = [currentDay addTimeInterval: secondsPerDay];


}

today = newDay;

}

4 个答案:

答案 0 :(得分:9)

您不仅需要保留创建的日期,还需要释放“今天”所持有的现有值,否则您将泄露旧的参考。

初始化实例时,请使用:

today = [[NSDate date] retain];

我会将最后一行更改为:

[today release];
today = [newDay retain];

最后,在你的dealloc方法中,添加:

[today release];
在调用[super dealloc]之前

;

答案 1 :(得分:2)

您需要阅读内存管理文档。就在这里:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

如果您要添加或减去天数,您可能需要阅读此内容,这是执行相同操作的另一种方法:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1

最后,如果出现问题,查看后面的痕迹通常会有所帮助(如果您无法自己解决问题,请将它们包含在您的问题中)。如果在跟踪中看到objc_msgSend(或其中一个伴随者),则内存管理错误通常会出现问题。

答案 2 :(得分:1)

也许你需要说

today = [[NSDate date] retain]

答案 3 :(得分:1)

我认为你需要保留addTimeInterval方法返回的newDay对象。在最后完成作业之前,您可能还需要在今天发布。