NSDate timeInterval = nil

时间:2010-07-06 19:24:03

标签: iphone objective-c xcode

我试图比较两个NSDate,一个是由viewDidLoad方法创建的,另一个是通过单击按钮来创建的。我希望能够单击按钮并找到自viewDidLoad运行以来的时差。我不断得到零差异。有任何想法吗?

#import "TimeViewController.h"

id startTime;

@implementation TimeViewController
- (void)viewDidLoad {

    NSDate *startTime = [NSDate date];
    NSLog(@"startTime = %@",startTime);
}

- (IBAction)buttonPressed{

    NSDate *now = [NSDate date];
    NSLog(@"now = %@",now);
    double timeInterval = [now timeIntervalSinceDate:startTime];
    NSLog(@"time difference = %@",[NSString stringWithFormat:@"%g",timeInterval]);

}

1 个答案:

答案 0 :(得分:3)

你有

id startTime;

在全球范围内,也是

    NSDate *startTime = [NSDate date];

viewDidLoad内。第二个语句创建一个名为startTime的局部变量,它隐藏全局变量。使用

    startTime=[[NSDate date] retain];

代替。

那就是说,我建议你来创建全局变量。相反,将它设为实例变量和属性:

@interface TimeViewController :NSObject{
      ....
      NSDate*startDate;
}
...
@end

正如Kubi所说,别忘了

-(void)dealloc{
     [startDate release];
     [super dealloc];
}

我还建议使用id来保存已知对象。谁告诉你的?这是一个非常糟糕的做法。即使声明全局变量,也应该使用

  NSDate*startDate;

以便编译器可以针对未定义的方法发出警告。