【发布时间】:2012-01-11 12:16:36
【问题描述】:
我在 cocos2d/xcode 中使用 NSMutableArray 遇到一个非常奇怪的错误
在我的代码中,我有一个包含对象 A 的 NSMutableArray
NSMutableArray *peasantArray;
另一个 NSMutableArray 包含对象 B
NSMutableArray *treeArray;
在定时更新函数中,我调用了另一个函数,它本质上是以下功能: 我会遍历 *peasantArray 中的所有对象 A,如果任何农民对象有一个变量 var == GameEntityCommandIdling,我会修改第二个 NSMutableArray *treeArray 中的对象 B,
问题是我注意到有时在我修改了农夫数组中的对象 A 之后,修改后的变量 (var) 在对象 A 中被修改/更新,之后通过以预定方式打印出变量状态;但是如果我要在下一个时间表(1/30 秒)中再次循环遍历 NSMutableArray *peasantArray,我将再次找到具有较旧/未更新变量(var)的对象 A,这导致我的算法错误,
但是,如果我在 NSMutableArray *peasantArray 中循环的时间少于 1 秒,则每次我都会正确地将对象 A 的变量 (var) 视为更新后的变量值,
那么对 NSMutableArray 的迭代速度有限制吗?
这里是我基本上刚刚提到的一些代码,
NSMutableArray *peasantArray;
NSMutableArray *treeArray;
.....
peasantArray = [[[NSMutableArray alloc] initWithCapacity:1]retain];
for(int i = 0; i < 1; i++)
{
Peasant *A = [[Peasant alloc] init];
[peasantArray addObject:A];
}
.... //在update()里面
for (int i = 0;i < [peasantArray count];i++)
{
Peasant *A = [peasantArray objectAtIndex:i];
if (A.status == something)
{
printf("A.status is something\n");
A.status = sometingelse;
...
//update other things not related to this NSMutableArray or object
}
}
.....
所以错误是有时我会有多个“A.status is something”的printf,尽管应该只打印其中一个,
非常感谢任何帮助,
谢谢,
【问题讨论】:
-
status是什么类型?是NSString吗?
标签: objective-c xcode cocos2d-iphone nsmutablearray