填充NSMutableArray以供以后在obj-c中使用

时间:2012-11-05 01:18:05

标签: objective-c ios nsmutablearray

如何填充具有设定容量的NSMutableArray供以后使用?

基本上我想设置一个NSMutableArray作为我的游戏对象的地图,所以我有这条线......

gameObjects = [[NSMutableArray alloc] initWithCapacity:mapWidth*mapHeight];

我曾希望创建并填充我的MutableArray,以便我可以使用这种索引访问它...

int ii = (cellY*mapWidth)+cellX;

NSDictionary *currentObject = [gameObjects objectAtIndex:ii];

但我刚刚学会了initWithCapacity没有填充数组,所以我应该创建空白对象来填充它,还是有一个Null我可以填充它?我也会用2 for循环或者有一个类似“initWith:myObject”的指令吗?

我希望能够检查数组中的某个索引以查看是否存在某个对象,所以我需要能够访问该索引点,而且我只能在那里存在某些内容或者我出错了。

我将使用这个NSMutableArray作为一个对象网格,它是一个组织为二维数组的一维数组,所以我需要能够用mapWidth * mapHeight填充它,然后计算出来索引并检查数组中的索引。

我在这里看了看谷歌,但找不到像我问的那样。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:4)

我认为你要找的是[NSNull null]。这正是您想要的 - 占位符值。

您可以在this question

中找到有关该主题的更多信息

答案 1 :(得分:3)

initWithCapacity只是一个性能优化 - 它对数组行为没有任何影响,它只是让代码“在幕后”不必在添加更多条目时重复放大内部数组。

因此,如果你想要一个“预先分配”的数组,你需要用NSNull对象或其他类似物填充它。然后,您可以使用isKindOfClass来判断对象是否是正确的类型,或者只是==将条目与[NSNull null]进行比较。 (因为只有一个NSNull对象,它总是有相同的地址)。

(或者您可以使用带有nil值的C风格指针数组作为空插槽。)

但是你可能最好使用NSMutableDictionary - 不需要预填充,如果元素不存在,你会得到一个nil指针。对于键,使用与数组索引相对应的NSNumber对象。

答案 2 :(得分:0)

initWithCapacity仅提示NSMutableArray它应该支持这么多对象。在添加它们之前,它实际上不会有任何对象。此外,数组中的每个条目都是指向对象的指针,而不是像标准c数组中通常所拥有的结构。

您需要改变您对问题的看法。如果您没有向数组添加对象,则它不在那里。所以要么就像你说的那样用“空”对象预先填充数组,这很奇怪。或者您可以根据需要添加对象。