IOS:NSMutableArray initWithCapacity

Cra*_*Dev 19 xcode objective-c init nsmutablearray ios

我有这种情况

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];
}
Run Code Online (Sandbox Code Playgroud)

但是如果我按顺序插入对象就可以了,相反如果我按此顺序填充数组:0和3之后,它不能正常工作,为什么???

Zap*_*pko 54

NSMutableArray即使容量为4,也不能在索引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];
Run Code Online (Sandbox Code Playgroud)


tas*_*oor 11

在C风格int a[10]创建大小为10的数组,你可以访问任何指标0,以9任何顺序.但是,这不符合的情况下initWithCapacityarrayWithCapacity.这只是暗示底层系统可以用来提高性能.这意味着您无法无序插入.如果你有大小的可变数组n则只能从索引插入0n,0n-1为现有位置和n在端部位置插入.所以0,1,2,3是有效的.但0,3或1,2顺序无效.