我有这样的情况
array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad
if (index == 0){
[array insertObject:object atIndex:0];
}
if (index == 1){
[array insertObject:object atIndex:1];
}
if (index == 2){
[array insertObject:object atIndex:2];
}
if (index == 3){
[array insertObject:object atIndex:3];
}
但是,如果我按顺序插入对象,那么一切都没问题,相反,如果我按以下顺序填充数组:0,在3之后,它不能正常工作,为什么?
发布于 2011-04-22 19:16:27
你不能在NSMutableArray
中插入索引为3的对象,即使它的容量是4。可变数组有多少个对象就有多少个可用的“单元格”。如果你想在可变数组中有“空单元”,你应该使用[NSNull null]
对象。在这里,它是一个特殊的存根--表示无数据的对象。
NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 4; ++i)
{
[array addObject:[NSNull null]];
}
[array replaceObjectAtIndex:0 withObject:object];
[array replaceObjectAtIndex:3 withObject:object];
发布于 2011-04-22 19:18:28
在C风格中,int a[10]
创建了一个大小为10的数组,您可以按任何顺序访问从0
到9
的任何索引。但initWithCapacity
或arrayWithCapacity
并非如此。这只是一个提示,底层系统可以用来提高性能。这意味着您不能乱序插入。如果你有一个大小为n的可变数组,那么你只能从索引0
插入到n
,0
到n-1
用于现有位置,n
用于在结束位置插入。所以0,1,2,3是有效的。但0、3或1,2顺序无效。
发布于 2011-04-22 19:20:58
你不能在任何随机索引处插入,如果你想这样做,那么首先用空对象初始化你的数组,然后调用replaceObjectAtIndex。
https://stackoverflow.com/questions/5754798
复制相似问题