如何在Objective-C中创建和维护同一对象的倍数?

时间:2011-06-23 19:30:09

标签: objective-c object bounce

我正试图在屏幕上形成多个Ball对象并反弹。我有一个很好的工作,但我有添加更多的问题。理想情况下,球的数量会有所不同,但是现在我试图将两个数组放入一个数组中以更改其余的代码。

我的问题是一切都编译好了,但我仍然只有一个球。这是我怀疑问题出现的地方。

我也觉得在viewDidLoad中这样做是不正确的,但我不确定它实际属于哪里。

viewDidLoad中:

- (void)viewDidLoad {
[super viewDidLoad];

balls = [[NSMutableArray alloc] init];
CGPoint newPos = CGPointMake(5,5);

for(int i = 0; i < 2; i++) {
[balls addObject:[[[Ball alloc] init] autorelease]];
}

[[balls objectAtIndex:1] setPosition:newPos];

[NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

}

- (void)onTimer
{
for(int i = 0; i < [balls count]; i++) {
    Ball *b = [balls objectAtIndex:i];
    [b update];
    [(BallView *)self.view refresh:b];
    }
}


- (void)refresh:(Ball *)aBall {
ball = aBall;
[self setNeedsDisplay];

}

我已经添加了我的onTimer,我认为添加延迟创建球将足以使这不是一个问题。所有更新都会根据加速度计/与屏幕边缘的碰撞来改变速度/方向。

1 个答案:

答案 0 :(得分:1)

确实应该显示两个球。检查它们的坐标,看它们是否重叠。另一方面,看起来你正在泄漏球阵列,以及ball1和ball2对象。您正在为它们分配init,因此您必须在viewDidLoad的末尾释放它们,或者,如果您使用retain属性,只需在设置它们时自动释放它们,以便它们被属性保留。

至于代码的位置,viewDidLoad应该没问题,但是考虑将balls数组放入你调用的init方法中来创建你的ViewController,因为如果没有设置该数组,你的ViewController可能无法工作。