2010-07-06 28 views
0

我想比较两个NSDates,一个是通过viewDidLoad方法创建的,另一个是通过单击按钮来创建的。我希望能够点击按钮并查找自viewDidLoad运行以来的时差。我一直得到零的差异。有任何想法吗?NSDate timeInterval = nil

#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]); 

} 

回答

3

你有

id startTime; 
在全球范围内

,也

NSDate *startTime = [NSDate date]; 

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

startTime=[[NSDate date] retain]; 

改为。

这就是说,我建议你而不是来创建全局变量。相反,使之实例变量和属性:

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

和库比什说,不要忘了

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

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

NSDate*startDate; 

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