【问题标题】:Initializing multidimensional NSArray for iPhone devel为 iPhone 开发初始化多维 NSArray
【发布时间】:2011-04-15 03:23:22
【问题描述】:
我开始做 iPhone 开发,我需要使用多维数组。
我使用以下方法对其进行初始化:
NSArray *multi=[NSArray
arrayWithObjects:[NSMutableArray arrayWithCapacity:13],
[NSMutableArray array],nil];
但是当我尝试像这样为第 n 个单元格赋值时:
[[multi objectAtIndex:4] addObject:@"val"];
应用程序挂起,因为索引 4 超出界限 [0 .. 1]。
初始化多数组的正确方法是什么?提前致谢和问候。
【问题讨论】:
标签:
iphone
objective-c
memory-management
multidimensional-array
nsarray
【解决方案1】:
我猜你想创建一个 NSMutableArrays 的 NSMutableArray:
NSMutableArray *multi = [NSMutableArray arrayWithCapacity: 13];
for (int i = 0; i != 13; i++)
{
NSMutableArray *array = [NSMutableArray arrayWithCapacity: 10];
[multi insertObject: array atIndex: 0];
}
之后,你的调用就有效了。
编辑:作为旁注,容量!= 计数,如果您知道这些,则在 .NET 或 C++ 的 STL 中也是如此。
【解决方案2】:
您所做的是创建一个包含两个对象的数组:另外两个数组。您实际上是在请求这个“超级数组”中的第 5 个对象,因为没有,所以它不起作用。
顺便说一句,即使你创建了一个指定容量的数组,它仍然是空的。指定容量只是为数组分配足够的内存以至少容纳给定数量的对象。如果你不添加任何对象,如果你请求第 10 个对象,它仍然会让你的应用崩溃。