2009-08-23 45 views
0

我有一个NSObject集合,我希望将其存储在运行时生成的二维数组中。在C#中,我只是使用一些友好的通用容器,但不太确定在Objective-C中用于iphone开发的最佳方式。目标C中的2D阵列

我猜NSMutableArray不是最好的路线。我不需要数组的增长,当我的网格管理器被创建时,我会知道我想要的大小,但是网格将以运行时高度和宽度构建。

我应该沿着'NSObject ** gridObjects = alloc ...'的方向做些什么吗?

回答

0

您可以随时使用Objective-C的纯C的东西(我不建议这样做,除非你有很好的理由):

NSObject** *twoDArray = malloc(sizeof(NSObject**) * rows); 
for (i = 0; i < rows; ++i) 
    twoDArray[i] = malloc(sizeof(NSObject*) * cols); 

要调整每个块,你可以使用realloc(如果你甚至需要)。使用后请勿忘记free

+0

这很有效,我将它作为我班的一个属性,但我在分配值时遇到了问题。我用Tile类型创建它。 Tile * tile = [[Tile alloc] init]; self.grid [x] [y] = tile; 我有错误“Incompat类型在赋值” – 2009-08-23 03:37:51

+0

啊,算出来。需要瓷砖*** – 2009-08-23 03:56:21

+1

请小心使用此解决方案,因为它与垃圾收集不兼容。可以使用NSAllocateCollectable来解决这个问题,但我也推荐NSArray的NSArray。 在这里编写一个类别方法来访问元素可能不错。 – 2009-08-23 04:50:54

3

如果你要存储指针在二维数组,你将不得不使用:

NSObject ***gridObjects 

我只想用的的NSArray对象(2D)一的NSArray