多个相同的指针,无法弄清楚为什么

时间:2012-07-09 15:28:43

标签: objective-c

我是Objective-C的新手,我觉得我可能只是犯了一个愚蠢的错误,但我试着用谷歌搜索这个没有运气(也许我只是没有找到正确的东西)

基本上,我尝试编写自己的对象类,然后创建它的几个实例,但数据似乎已锁定在一起;更改任何一个引用的数据会更改所有引用的数据。

这是我制作对象并使用它们的地方。

@implementation Drawing
//leaving many functions out as they are not part of the problem

Ball * balls[10];
int numPoints;

//this gets called first
- (id) initWithCoder: (NSCoder *)aDecoder
{
    //leaving out loading of images.....

    numPoints=10;
    for(int i=0; i<10; i++){
        balls[i]=[[Ball alloc] init];
        printf("bmem: %p\n",%balls[i]);
        float tpx=arc4random()%1024;
        float tpy=arc4random()%768;
        printf("randX: %f\n",tpx);
        printf("randY: %f\n",tpy);
        CGPoint tempPt = CGPointMake(tpx,tpy);
        printf("mem: %p\n",%tempPt);
        [balls[i] setLocation:tempPt];
    }
    //code to start a timer on the drawRect function....
}

//called regularly, every 30 seconds
- (void) drawRect:(CGRect)rect
{
    CGContextRef c=UIGraphicsGetCurrentContext();
    CGContextClearRect(c, rect);

    for(int i=0; i<numPoints; i++)
    {
        int ptX=[balls[i] getX];
        int ptY=[balls[i] getY];
        printf("index: %d\n",i);
        printf("x: %d\n",ptX);
        printf("y: %d\n",ptY);
        CGContextDrawImage(c, CGRectMake((int)ptX-WIDTH/2, (int)ptY-WIDTH/2, WIDTH, HEIGHT), image);
    }
}

该程序输出一系列我认为有用的数字。 - 按照预期,“bmem”或球所在的记忆点按规则间隔递增。 - “randX”和“randY”完全是随机的,因为它们应该是。 - “mem”或CGPoint内存中的点不会改变

这是球对象:

@implementation Ball
int x;
int y;

-(void)setLocation:(CGPoint)loc{
    x=loc.x;
    y=loc.y;
}

-(int)getX{
    return x;
}

-(int)getY{
    return y;
}

@end

起初我只是在Ball类中有静态属性,但在谷歌上搜索我发现objective-c没有静态属性。我盲目地尝试了十几种不同的事情而没有成功。我真的需要这个才能工作。

1 个答案:

答案 0 :(得分:2)

您正在使用全局变量:

Ball * balls[10];
int numPoints;

当您可能需要实例变量时:

@interface Balls : NSObject
{
    Ball * balls[10];
    int numPoints;
}
...
@end