使用静态NSDate确定传递时间

Pat*_*cia 5 iphone macos static objective-c nsdate

我正在尝试设置一个静态日期来确定每次调用此方法之间经过了多少秒.

瞬间崩溃!

-(void) myMethod
{   
    static NSDate *staticDate = nil;
    NSTimeInterval seconds   = 0.0;

    if(staticDate)
    {   
        NSLog(@"%@", staticDate);
        seconds = [staticDate timeIntervalSinceNow];
    }

    staticDate = [NSDate date];
    NSLog(@"%.2f", seconds);
}

Jas*_*ien 7

也许你会更好地使用它timeIntervalSince1970,因为它是许多语言中常用的方法.它将返回自1970年1月1日以来经过的秒数.

设置一个实例变量来保存第一个timeInterval并将其初始化为返回的值[[NSDate date] timeIntervalSince1970],然后你可以在你的方法中使用它,如下所示:

-(void) myMethod
{
    NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970] - _initialTimeInterval;
    NSLog(@"Seconds = %.2f", seconds);
}
Run Code Online (Sandbox Code Playgroud)

当前代码可能崩溃的[NSDate date]一个可能原因是返回一个自动释放的对象.即使变量是静态的,自动释放池也可能释放日期对象,然后在下次运行该方法时尝试访问它时导致崩溃.

如果您创建新日期或保留从中返回的日期,您可以绕过此崩溃date.但是,将保留/拥有的对象分配给静态变量将导致内存泄漏,我建议您尝试使用我的解决方案.


Jam*_*ord 0

它会在以下行崩溃吗?

NSLog(@"%.2f", seconds);
Run Code Online (Sandbox Code Playgroud)

因为NSTimeInterval是double类型的 typedef ,并且您的占位符指定了float