iphone - 使用静态 NSDate 确定通过时间

标签 iphone objective-c macos static nsdate

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

瞬间崩溃!

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

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

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

最佳答案

也许您最好使用 timeIntervalSince1970,因为它是跨多种语言的常用方法。它将返回自 1970 年 1 月 1 日以来经过的秒数。

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

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

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

如果您创建一个新日期或保留从 date 返回的日期,您也许可以避开这次崩溃。但是,将保留/拥有的对象分配给静态变量会导致内存泄漏,我建议您改用我的解决方案。

关于iphone - 使用静态 NSDate 确定通过时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853006/

相关文章:

iphone - #import <libxml/HTMLparser.h> 要导入什么库

iphone - MPMoviePlayerController切换电影导致白闪

iphone - 是 NSDateFormatter dateFromString : supposed to return nil for an invalid string?

MacOsX 上的 Python 图像库和 JPEG

javascript - 使用 Javascript 模拟 native 滚动

iphone - UICollectionView布局

ios - 在 iOS 7 中隐藏状态栏时防止 UINavigationController 调整原点

objective-c - 更改 -observeValueForKeyPath :ofObject:change:context: 中的属性时,Cocoa 绑定(bind)不起作用

java - 如何在 Java 程序中更改 Mac OS X 的 'About' 屏幕?

linux - 编写、部署、安装用 shell 编写的命令行工具