我有一个应用程序,其中向用户显示内容。我现在想知道用户实际查看该内容的秒数。所以在我的头文件中,我已声明了
NSDate *startTime;
NSDate *endTime;
然后在我的viewWillAppear
中 startTime = [NSDate date];
然后在我的viewWillDisappear
中endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);
然而,应用程序崩溃,有时会出现不同的错误。有时它是内存泄漏,有时它是NSTimeInterval的问题,有时它会在第二次返回内容后崩溃。
有什么想法来解决这个问题吗?
答案 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];
}