两个日期之间的差异,以秒为单位

时间:2013-11-01 09:59:01

标签: ios nsdate nstimeinterval

我有一个应用程序,其中向用户显示内容。我现在想知道用户实际查看该内容的秒数。所以在我的头文件中,我已声明了

 NSDate *startTime;
 NSDate *endTime;

然后在我的viewWillAppear

 startTime = [NSDate date];

然后在我的viewWillDisappear

endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);

然而,应用程序崩溃,有时会出现不同的错误。有时它是内存泄漏,有时它是NSTimeInterval的问题,有时它会在第二次返回内容后崩溃。

有什么想法来解决这个问题吗?

2 个答案:

答案 0 :(得分:13)

因为你在写

时没有使用ARC

startTime = [NSDate date];

您不会保留startTime,因此在调用-viewWillDisappear之前会将其取消分配。试试

startTime = [[NSDate date] retain];

另外,我建议使用ARC。与没有它的内存管理相比应该少得多的错误

答案 1 :(得分:12)

您应该为开始日期声明一个保留属性。在计算时差之前,您的日期已经发布。

声明

@property (nonatomic, retain) NSDate *startDate

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setStartDate: [NSDate date]];
}

- (void)viewWillDisappear:(BOOL)animated
{
     [super viewWillDisappear:animated];
     NSLog(@"Seconds --------> %f",[[NSDate date] timeIntervalSinceDate: self.startDate]);
}

不要忘记清理。

- (void)dealloc
{
    [self.startDate release];
    [super dealloc];
}