首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTimer故障

NSTimer故障
EN

Stack Overflow用户
提问于 2009-10-09 00:05:20
回答 2查看 2.5K关注 0票数 1

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

有人能告诉我我哪里做错了吗?

代码:

代码语言:javascript
复制
- (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中有以下内容:

代码语言:javascript
复制
@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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-09 00:38:22

其中,您拥有:

代码语言:javascript
复制
startTime = [NSDate date];

您需要:

代码语言:javascript
复制
startTime = [[NSDate date] retain];

任何不带alloc,new,init的内容都会被自动释放(经验法则)。所以发生的事情是,你正在创建NSDate,将它分配给startTime,它被自动释放(销毁),然后你试图在一个完全释放的对象上调用timeIntervalSinceNow,所以它爆炸了。

添加保留会增加保留计数,因此在自动释放后它仍然会留在周围。不过,别忘了在用完后手动释放它!

票数 4
EN

Stack Overflow用户

发布于 2009-10-09 01:31:50

要利用@属性,您需要这样做: self.startTime = NSDate date

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1541219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档