47

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

 NSDate *startTime;
 NSDate *endTime;

然后在我看来会出现

 startTime = [NSDate date];

然后在我看来WillDisappear

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

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

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

4

2 回答 2

13

因为你没有使用 ARC,所以当你写

startTime = [NSDate date];

您不保留startTime,因此在-viewWillDisappear调用之前将其释放。尝试

startTime = [[NSDate date] retain];

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

于 2013-11-01T10:44:13.853 回答
13

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

所以声明

@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];
}
于 2013-11-01T10:48:02.857 回答