我正在尝试设置一个静态日期以确定每次调用此方法之间经过了多少秒。
瞬间崩溃!
-(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/