IOS:NSMutableArray initWithCapacity

时间:2011-04-22 11:07:45

标签: objective-c xcode ios nsmutablearray init

我有这种情况

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之后,它不能正常工作,为什么???

4 个答案:

答案 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的数组,您可以按任意顺序访问从09的任何索引。但initWithCapacityarrayWithCapacity并非如此。这只是暗示底层系统可以用来提高性能。这意味着您无法无序插入。如果您有一个大小为n的可变数组,那么您只能从索引0插入到n0n-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,然后使用零项启动它,然后插入它!我认为它会起作用!!!