首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IOS: NSMutableArray initWithCapacity

IOS: NSMutableArray initWithCapacity
EN

Stack Overflow用户
提问于 2011-04-22 19:07:45
回答 4查看 31.9K关注 0票数 19

我有这样的情况

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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];
票数 55
EN

Stack Overflow用户

发布于 2011-04-22 19:18:28

在C风格中,int a[10]创建了一个大小为10的数组,您可以按任何顺序访问从09的任何索引。但initWithCapacityarrayWithCapacity并非如此。这只是一个提示,底层系统可以用来提高性能。这意味着您不能乱序插入。如果你有一个大小为n的可变数组,那么你只能从索引0插入到n0n-1用于现有位置,n用于在结束位置插入。所以0,1,2,3是有效的。但0、3或1,2顺序无效。

票数 11
EN

Stack Overflow用户

发布于 2011-04-22 19:20:58

你不能在任何随机索引处插入,如果你想这样做,那么首先用空对象初始化你的数组,然后调用replaceObjectAtIndex。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5754798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档