访问通知中的NSDate对象时的EXC_BAD_ACCESS

时间:2011-09-13 06:35:46

标签: cocoa memory-management nstimer

我有一个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] retain];没有崩溃,则因为我在startDate上使此计时器无效而无法理解释放dealloc的位置。

注意:由于需要支持10.4,所以无法使用属性。

此致

阿克巴尔

2 个答案:

答案 0 :(得分:1)

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

1分配像这样的值,

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

2照常检索值

NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];

3 最后发布 dealloc 方法。

答案 1 :(得分:0)

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

@interface MyClass : NSObject {

     NSTimeInterval _startTime;
} 

@implementation...

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

     _startTime = [NSDate timeIntervalSinceReferenceDate];
}

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

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