【问题标题】:timeIntervalSinceNow usage to get the time elapsed valuetimeIntervalSinceNow 用于获取经过时间的值
【发布时间】:2017-07-16 00:46:22
【问题描述】:

我的代码如下所示:

 NSDate *currDate;
 if(someCondition) {
   currDate = [NSDate date];
 }

  //do some work 

 //calculate num of milli seconds passed since currDate was updated 
 if([currDate timeIntervalSinceNow] > MAX_MILLI_SECS) {

   //do something
 }

所以我这里有两个问题

  1. 由于 currDate 发生在我们计算 timeIntervalSinceNow 之前,返回的值是否会是负数?
  2. 由于存在一个从未初始化过currDate 的代码路径,如果我在没有经过if(someCondition) 块的情况下调用timeIntervalSinceNow 会发生什么?

【问题讨论】:

    标签: ios objective-c nsdate nstimeinterval


    【解决方案1】:

    来自docs for -timeIntervalSinceNow

    如果日期对象早于当前日期和时间,则该属性值为负数。

    如果代码是在启用 ARC 的情况下构建的,则保证 currDate 被初始化为 nil。如果未采用将其设置为其他内容的分支,则在调用 [currDate timeIntervalSinceNow] 时,它仍然是 nil。发往nil 的消息返回消息类型的相应零值。因此,[currDate timeIntervalSinceNow] 的计算结果为 0。

    如果代码不是在启用 ARC 的情况下构建的,那么 currDate 将是未初始化的垃圾并且结果是未定义的。

    【讨论】:

    • 感谢您的解释。对我来说这有点令人困惑,我假设 nil 日期将被解释为 1970 年 1 月 1 日。
    【解决方案2】:

    如果是 nil 值,则 timeIntervalSinceNow 返回 NaN

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 2019-01-26
      • 2018-03-31
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      相关资源
      最近更新 更多