【问题标题】:Difference between 2 dates in seconds ios2个日期之间的差异(以秒为单位)
【发布时间】:2013-11-01 09:59:01
【问题描述】:

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

 NSDate *startTime;
 NSDate *endTime;

然后在我看来会出现

 startTime = [NSDate date];

然后在我看来WillDisappear

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

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

有解决这个问题的想法吗?

【问题讨论】:

  • 我已经编辑了上面的代码......我有时得到的日志是:-[__NSCFType timeIntervalSinceReferenceDate]: unrecognized selector sent to instance 0xbbf7c10'
  • 不使用ARC,我尝试在dealloc方法和viewWillDisappear中释放它们,但仍然遇到同样的问题?

标签: ios nsdate nstimeinterval


【解决方案1】:

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

startTime = [NSDate date];

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

startTime = [[NSDate date] retain];

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

【讨论】:

    【解决方案2】:

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

    所以声明

    @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];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2011-04-27
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2017-03-09
      • 1970-01-01
      相关资源
      最近更新 更多