NSTimer崩溃断点

时间:2013-12-23 21:48:33

标签: ios objective-c nstimer

我无法弄清楚下面粘贴的代码有什么问题,我正在使用Todd Moore书中的xcode,这是第2章 - 你好pong,我在scheduledTimerWithTimeInterval得到了断点1.1崩溃。在书中定时器配置结束时添加]保留];但xcode 5表示已经取消了。我修改了这个没有保留的编译,但问题是崩溃。

- (void)animate
{
    _puck.center = CGPointMake(_puck.center.x + dx*speed,_puck.center.y + dy*speed);
}

- (void)start
{
    if (timer == nil) {
        timer = [NSTimer scheduledTimerWithTimeInterval:0.016 target:self selector:@selector(animate) userInfo:NULL repeats:YES];

    }
    _puck.hidden = NO;
}

1 个答案:

答案 0 :(得分:1)

因为您处于ARC设置,即自动引用计数,所以正在执行animate / start的对象可能不再在内存中,具体取决于其余代码的工作方式。

如果调用该计时器,那么用于保留它的任何对象可能都不在内存中。

您可能需要快速搜索如何在没有自动引用计数的情况下启动项目,以便您可以更直接地按照本书中的示例进行操作。

someObject = [[something alloc] init] retain];
[someObject start];

如果你没有将someObject存储在可能存在问题的地方。

[编辑]

我找到了Todd Moore示例的源代码。

这些更改应该可以让它与ARC一起使用。

在PaddlesViewController.h中删除它

NSTimer *timer;

添加(在其他@properties附近)

@property (nonatomic, retain) NSTimer *timer;

在PaddlesViewController.m中添加(在其他@synthesize附近)

@synthesize timer;

这应该允许它在没有保留

的情况下运行