EXC_BAD_ACCESS 访问通知中的 NSDate 对象

发布于 2024-12-04 07:03:22 字数 619 浏览 2 评论 0 原文

我有一个 NSTimer 以预定的时间间隔 1 运行。这里我不断跟踪当前时间,如下所示。

- (void)myMethod:(NSTimer*)timer {

NSDate *startDate = [[[NSDate alloc] init] autorelease];
}

在某些通知中,我试图找出时间更改之前和之后之间的差异。

-(void) handleNotification: (NSNotification*) notification
{    
    NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];
}

我在这里得到EXC_BAD_ACCESS

如果我使用 startDate = [[NSDate date] keep]; 不会崩溃,不知道在哪里释放 startDate 因为我在 dealloc< 上使这个计时器无效/代码>。

注意:不能使用属性,因为需要支持10.4。

问候,

阿克巴

I have a NSTimer running with scheduled time interval 1.Here I am keep tracking the current Time as given below.

- (void)myMethod:(NSTimer*)timer {

NSDate *startDate = [[[NSDate alloc] init] autorelease];
}

on some notification I am trying to find the difference between before and after time change.

-(void) handleNotification: (NSNotification*) notification
{    
    NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];
}

Here I am getting EXC_BAD_ACCESS.

If I use startDate = [[NSDate date] retain]; no crash,didn't understand where to release startDate as I am invalidating this timer on dealloc.

Note:can't use properties since need to support 10.4.

Regards,

Akbar

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹊巢 2024-12-11 07:03:22

一种方法是释放以前的值并分配新值。

1 像这样分配值,

if (startDate) [startDate release];
startDate = [[NSDate date] retain];

2 像往常一样检索值,

NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];

3最后释放它在dealloc方法中。

One way is to release the previous value and assign the new one.

1 Assign the value like this,

if (startDate) [startDate release];
startDate = [[NSDate date] retain];

2 Retrieve the value as usual,

NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];

3 Finally release it in dealloc method.

你是年少的欢喜 2024-12-11 07:03:22

更好的方法是根本不创建任何 NSDate 对象:

@interface MyClass : NSObject {

     NSTimeInterval _startTime;
} 

@implementation...

- (void) myMethod:(NSTimer*)timer {

     _startTime = [NSDate timeIntervalSinceReferenceDate];
}

-(void) handleNotification: (NSNotification*) notification {    

    NSTimeInterval elapsedTime = ([NSDate timeIntervalSinceReferenceDate] - _startTime);
}

A better way is to not create any NSDate object at all:

@interface MyClass : NSObject {

     NSTimeInterval _startTime;
} 

@implementation...

- (void) myMethod:(NSTimer*)timer {

     _startTime = [NSDate timeIntervalSinceReferenceDate];
}

-(void) handleNotification: (NSNotification*) notification {    

    NSTimeInterval elapsedTime = ([NSDate timeIntervalSinceReferenceDate] - _startTime);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文