我需要为我的精灵的坐标制作一个数组,并且我想在精灵从数组中得到坐标时删除坐标,因为我不希望另一个精灵具有相同的坐标,我似乎无法让它工作,没有错误,并在调试时说nsexception并退出。我做错了什么,我在哪里解除分配数组?当我在dealloc中释放它时,它说我需要声明它们。
CGPoint cg1 = CGPointMake(33,33);
NSValue *cg1obj = [NSValue valueWithCGPoint:cg1];
CGPoint cg2 = CGPointMake(33,97);
NSValue *cg2obj = [NSValue valueWithCGPoint:cg2];
NSMutableArray *numberxy = [[NSMutableArray alloc] init]; int pointcount = 0;
[numberxy insertObject:cg1obj atIndex:pointcount++];
[numberxy insertObject:cg2obj atIndex:pointcount++];
NSMutableArray *sprites = [[NSMutableArray alloc] init]; int spritecount = 0;
[sprites insertObject:red1 atIndex:spritecount++];
[sprites insertObject:red2 atIndex:spritecount++];
for (int i=0; i<3;i++) {
int rpoint = arc4random() % 3;
int rsprite = arc4random() % 3;
CGPoint point = [[numberxy objectAtIndex:rpoint] CGPointValue];
CCSprite *sprite1 = [sprites objectAtIndex:rsprite];
sprite1.position = ccp(point.x,point.y);
if (sprite1.position.x == point.x && sprite1.position.y == point.y) {
[numberxy removeObjectAtIndex:rpoint];
[sprites removeObjectAtIndex:rsprite];
}
}
答案 0 :(得分:1)
你的代码很奇怪。使用后为什么定义xValue
?如果之前以相同的方式定义xValue
并且您现在正在重新定义xValue
,则可能会发生泄漏。然后,检查新X
中是否有xValue
。新xValue
中没有任何内容,因此if
语句将评估为false,因此不会删除任何内容。
NSNumber *X = [NSNumber numberWithInt:randomNumberx];
[xValue containsObject: numberx];
xValue = [[NSMutableArray alloc]init];
if ([xValue containsObject:X]) {
[numberx removeObject:X];
}
if语句之外的[xValue containsObject: numberx];
还有什么意义?它没有目的。