Ios timeIntervalSinceNow用于获取时间流逝值

Ios timeIntervalSinceNow用于获取时间流逝值,ios,objective-c,nsdate,nstimeinterval,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

我的代码如下所示:

 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
 }
我这里有两个问题

  • 因为currDate发生在我们计算timeIntervalSinceNow之前,所以返回的值是负值吗
  • 由于存在一个从未初始化过
    currDate
    的代码路径,如果我调用
    timeIntervalSinceNow
    而没有经过
    if(someCondition)
    块,会发生什么
  • 从:

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

    如果代码是在启用ARC的情况下生成的,则保证将
    currDate
    初始化为
    nil
    。如果未执行将其设置为其他值的分支,则在调用
    [currDate timeIntervalSinceNow]
    时,该分支将保持为
    nil
    。发送至
    nil的消息返回消息类型的相应零值。因此,
    [currDate timeIntervalSinceNow]
    的计算结果为0

    如果代码未在启用ARC的情况下生成,则
    currDate
    将是未初始化的垃圾,并且结果未定义。

    来自:

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

    如果代码是在启用ARC的情况下生成的,则保证将
    currDate
    初始化为
    nil
    。如果未执行将其设置为其他值的分支,则在调用
    [currDate timeIntervalSinceNow]
    时,该分支将保持为
    nil
    。发送至
    nil的消息返回消息类型的相应零值。因此,
    [currDate timeIntervalSinceNow]
    的计算结果为0


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

    如果执行TimeIntervalsInnow时为空值,则返回NaN

    如果执行TimeIntervalsInnow时为空值,则返回NaN

    感谢您的解释。对我来说,这有点让人困惑,我假设一个
    nil
    日期会被解释为1970年1月1日。谢谢你的解释。但对我来说,这有点令人困惑,我假设
    nil
    日期将被解释为1970年1月1日。