timeIntervalSinceNow用于获取经过时间的值

时间:2017-02-25 02:25:55

标签: ios objective-c nsdate nstimeinterval

我的代码看起来像这样:

 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的代码路径,如果我在未经timeIntervalSinceNow阻止的情况下调用if(someCondition)会怎样?

2 个答案:

答案 0 :(得分:3)

来自docs for -timeIntervalSinceNow

  

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

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

如果代码未使用ARC构建,那么[currDate timeIntervalSinceNow]将是未初始化的垃圾,结果未定义。

答案 1 :(得分:-1)

如果它是一个零值,则timeIntervalSinceNow返回一个NaN