gpt4 book ai didi

iphone - NSDate : timeIntervalSinceNow crash

转载 作者:行者123 更新时间:2023-12-03 20:45:03 25 4
gpt4 key购买 nike

我想在屏幕上显示自某个事件以来耗时。我有一个成员变量

NSDate *_startTime;

我像这样分配它(并启动计时器):

_startTime = [NSDate date];
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(clock) userInfo:nil repeats:YES];

我的时钟函数被调用得很好,但是当我尝试查找耗时时,我遇到了崩溃,没有真正的方法来确定发生了什么;我简单地获取了EXC_BAD_ACCESS。下面是我尝试获取自 _startDate 引发异常以来耗时的方法:

NSTimeInterval secondsElapsed = [_startTime timeIntervalSinceNow];

它在这条线上崩溃 - 我环顾四周,这似乎是正确的语法,这里发生了什么?

最佳答案

除非您使用 ARC,否则您需要拥有存储在 _startTime 中的 NSDate 对象的所有权。 +[NSDate date] 返回一个不属于您的对象,并且该对象很可能已被释放,因此在您发送该对象时该对象已无效 timeIntervalSinceNow.

您可以像这样创建一个拥有的NSDate:

// By default, NSDates are initialized with the current date
_startTime = [[NSDate alloc] init];

或者通过显式获取+date返回值的所有权:

_startTime = [[NSDate date] retain];

它们实际上是等效的。

更好的是(假设您有一个为 _startTime 定义的属性(您应该这样做))使用 setter:

[self setStartTime:[NSDate date]];

将属性定义为retaining,这将正确处理内存。

关于iphone - NSDate : timeIntervalSinceNow crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com