gpt4 book ai didi

cocoa - NSTimer 的问题

转载 作者:行者123 更新时间:2023-12-03 16:51:02 24 4
gpt4 key购买 nike

我正在尝试运行下面的代码,但在“Tick”写入控制台后,它一直锁定我的模拟器。它从不输出“Tock”,所以我的猜测是它与“NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];”行有关。 IBactions 由按钮激活。 timer 和 startTime 在 .h 中分别定义为 NSTimer 和 NSDate。

谁能告诉我我做错了什么?

代码:

- (IBAction)startStopwatch:(id)sender
{
startTime = [NSDate date];
NSLog(@"%@", startTime);
timer = [NSTimer scheduledTimerWithTimeInterval:1 //0.02
target:self
selector:@selector(tick:)
userInfo:nil
repeats:YES];
}

- (IBAction)stopStopwatch:(id)sender
{
[timer invalidate];
timer = nil;
}

- (void)tick:(NSTimer *)theTimer
{
NSLog(@"Tick!");
NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];
NSLog(@"Tock!");
NSLog(@"Delta: %d", elapsedTime);
}

我在 .h 中有以下内容:

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {

NSTimer *timer;
NSDate *startTime;
}


- (IBAction)startStopwatch:(id)sender;
- (IBAction)stopStopwatch:(id)sender;
- (void)tick:(NSTimer *)theTimer;

@property(nonatomic, retain) NSTimer *timer;
@property(nonatomic, retain) NSDate *startTime;

@end

最佳答案

你所在的地方:

startTime = [NSDate date];

您需要:

startTime = [[NSDate date] retain];

任何没有 alloc、new、init 创建的东西都会被自动释放(根据经验)。所以发生的情况是,您正在创建 NSDate,将其分配给 startTime,它会自动释放(销毁),然后您尝试在完全释放的对象上调用 timeIntervalSinceNow,因此它会爆炸。

添加保留增加了保留计数,因此在自动释放后它仍然存在。不过,完成后不要忘记手动释放它!

关于cocoa - NSTimer 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541219/

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