我有一个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,所以无法使用属性。
此致
阿克巴尔
答案 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);
}