我有这种情况
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之后,它不能正常工作,为什么???
答案 0 :(得分:53)
即使容量为4,也不能在NSMutableArray
中的索引3处插入对象。可变数组具有与其中的对象一样多的可用“单元”。如果要在可变数组中使用“空单元”,则应使用[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];
答案 1 :(得分:10)
在C样式中int a[10]
创建一个大小为10的数组,您可以按任意顺序访问从0
到9
的任何索引。但initWithCapacity
或arrayWithCapacity
并非如此。这只是暗示底层系统可以用来提高性能。这意味着您无法无序插入。如果您有一个大小为n的可变数组,那么您只能从索引0
插入到n
,0
到n-1
用于现有位置,n
用于在最终位置插入。所以0,1,2,3是有效的。但是0,3或1,2顺序无效。
答案 2 :(得分:0)
你不能插入任何随机索引,如果你想这样做,那么首先用null对象初始化你的数组,然后调用replaceObjectAtIndex。
答案 3 :(得分:-3)
你不能先插入例如索引0然后索引2你必须插入一步插入到0,1,2,3,4,5 .....,n你想做什么???你有什么问题???
您可以尝试创建一个Array,然后使用零项启动它,然后插入它!我认为它会起作用!!!