一个简单的测试 -
- (void)viewDidLoad
{
[super viewDidLoad];
date2 = [NSDate dateWithTimeIntervalSinceNow:3];
myTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(timerFires)
userInfo:nil
repeats:YES];
}
- (void)timerFires{
date1 = [NSDate date];
NSTimeInterval timeBetween = [date1 timeIntervalSinceDate:date2];
NSLog(@"follow: %f", timeBetween);
}
在“timerFires”中导致“EXC_BAD_ACCESS”错误
Thread 1: Program received signal: "EXC_BAD_ACCESS".
我在.h文件中声明了'date1''date2'和'myTimer'。
似乎 - (void)timerFires无法获得'date2'的值。 你能帮我解决一下吗?
答案 0 :(得分:0)
在执行date2 = [NSDate dateWithTimeIntervalSinceNow:3];
时,您要将自动释放的对象分配给date2
。这是在计时器触发之前释放的。如果要在其他地方使用它,则必须retain
该对象。这样做 -
date2 = [[NSDate dateWithTimeIntervalSinceNow:3] retain];
请记住,因为你保留了这个,所以你需要在之后发布它。
答案 1 :(得分:0)
我猜你的日期变量并没有停留,因为你从未明确地保留它们。 [NSDate dateWithTimeIntervalSinceNow:3]返回一个自动释放的对象。你是否将日期实例变量声明为保留的属性并合成其getter和setter?例如,在您的界面文件中:
@interface MyClass {
NSDate *date1;
NSDate *date2;
}
@property (nonatomic, retain) NSDate *date1;
@property (nonatomic, retain) NSDate *date2;
然后在您的实现文件中:
@implementation
@synthesize date1, date2
然后您应该使用self访问它们,以便正确保留它们:
self.date2 = [NSDate dateWithTimeIntervalSinceNow:3];