【发布时间】:2011-06-02 04:44:08
【问题描述】:
我目前正在尝试编写一个类来创建人造网格系统,以使用 NSMutableArrays 的 NSMutableArray 跟踪游戏实体的 NSMutableArray。鉴于我在 Objective-C 编程方面的经验有限,我不确定某些事情是如何工作的。
这里是init方法:
#define MAX_BALL_ROWCOUNT 6
#define MAX_BALL_COLCOUNT 4
- (id) initWithMutableArray:(NSMutableArray *)aList {
self = [super init];
if (self != nil) {
ballList = [[NSMutableArray alloc] initWithCapacity: MAX_BALL_ROWCOUNT];
for (int i=0; i<MAX_BALL_ROWCOUNT; i++) {
NSMutableArray *balls = [[NSMutableArray alloc] initWithCapacity:MAX_BALL_COLCOUNT];
[ballList addObject:balls];
[balls release];
}
int x = 0;
for (NSMutableArray *array in ballList) {
for (int i = 0; i<MAX_BALL_COLCOUNT; i++) {
[array addObject:[aList objectAtIndex:x]];
x++;
}
}
}
return self;
}
ballList 是类的 NSMutableArray,将存储 NSMutableArrays。
aList 是包含我希望跟踪的 GameEntities 的 NSMutableArray,它被传递到此类中。
要存储的所有实体的大小和数量都是固定的,这就是为什么不检查数组的大小和要存储的实体数量的原因。
所以我的第一个问题涉及释放内存。这是我目前拥有的 dealloc 函数:
- (void) dealloc {
[ballList release];
[super dealloc];
}
在 ballList 上调用 release 是否会导致在其包含的 NSMutableArrays 上调用 release(随后将在 NSMutableArrays 包含的对象上调用 release)还是我必须编写如下内容:
for (NSMutableArray *array in ballList) {
[array release];
}
[ballList release];
我的第二个问题涉及到这个数组数组的使用。这是遍历ballList的正确方法吗?
- (void) update {
for (NSMutableArray *array in ballList) {
for (GameEntity *balls in array) {
(CGPoint) location = [balls getLocation];
[balls setLocation: CGPointMake(location.x+1, location.y+1)];
}
}
}
最后,在上面设置球位置的代码中,它是否只影响 ballList 中的内容,还是传递给 ballList 的原始 aList 也会发生变化?如果原始aList中的内容没有改变,我将如何编写它?
如果人们有更好的方法来跟踪网格系统中的实体,我也愿意接受。提前致谢。
【问题讨论】:
标签: objective-c memory-management multidimensional-array nsmutablearray storage