我无法弄清楚下面粘贴的代码有什么问题,我正在使用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;
}
答案 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;
这应该允许它在没有保留
的情况下运行