如何使用NSDate测量起点的时间间隔?

时间:2011-08-10 13:28:27

标签: iphone objective-c ios

我在项目的许多地方使用了一种方法,如下所示:

-(void)showSignInView
{
    if(check for time interval)
    [[self superview] addSubview:loginController.view];
} 

我想首次注意调用此方法,然后在此方法的每次后续调用中检查以确保间隔距离原始调用超过15分钟。只有这样它才会执行其余的代码。

我知道你可以使用NSDate来测量时间间隔,使用如下代码:

NSDate *firstTime = [[NSDate date] retain];

NSDate *SecondTime = [NSDate date];

NSLog(@"Time elapsed: %f", [SecondTime timeIntervalSinceDate:firstTime]);

但我不确定如何实施初始时间检查,然后进行后续比较。我怎么能这样做?

3 个答案:

答案 0 :(得分:7)

创建名为previousTime

的属性
@property(nonatomic, retain) NSDate *previousTime;

并创建一种方法来查找时差。

- (NSTimeInterval)timeDifferenceSinceLastOpen {

    if (!previousTime) self.previousTime = [NSDate date];
    NSDate *currentTime = [NSDate date];
    NSTimeInterval timeDifference =  [currentTime timeIntervalSinceDate:previousTime];
    self.previousTime = currentTime;
    return timeDifference;
}

答案 1 :(得分:3)

您可以使用GCD来实现这一目标。 dispatch_once()函数可以安排块只在应用程序的生命周期内执行一次。

答案 2 :(得分:2)

NSDate *firstTime = nil;

- (void)loadView {

    [self calculateTime:[NSDate dateWithTimeIntervalSince1970:1312996898]];
}

- (void)calculateTime:(NSDate*)secondTime
{

    double offset = [secondTime timeIntervalSinceDate:[self getFirstTime]];

    if (offset >= 900.0) {
        NSLog(@"15 min gone");
    }
}

- (NSDate *)getFirstTime
{
    if (!firstTime) {
        firstTime = [[NSDate date] retain];
    }

    return firstTime;
}