2013-11-01 65 views
46

我有一个应用程序向用户显示内容。我现在想知道用户实际查看该内容的秒数。所以在我的头文件,我在我viewWillDisappear声明的以秒为单位的2个日期之间的差异ios

NSDate *startTime; 
NSDate *endTime; 

然后在我的viewWillAppear中

startTime = [NSDate date]; 

然后

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

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

任何想法来解决这个问题?

+1

发布崩溃日志。 – Jano

+0

我编辑了上面的代码...我有时得到的日志是: - [__ NSCFType timeIntervalSinceReferenceDate]:无法识别的选择器发送到实例0xbbf7c10' –

+0

您使用的是ARC吗? – medvedNick

回答

13

,因为你不使用ARC,当你写

startTime = [NSDate date];

你不保留startTime,所以-viewWillDisappear被调用之前就被释放。尝试

startTime = [[NSDate date] retain];

另外,我建议使用ARC。使用内存管理的错误应该少于没有它的错误

11

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

所以申报

@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]; 
} 
相关问题