【问题标题】:IOS: NSMutableArray initWithCapacityIOS:NSMutableArray initWithCapacity
【发布时间】:2011-04-22 11:07:45
【问题描述】:

我有这种情况

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 和索引 2 之后插入对象,但它不起作用

标签: objective-c xcode ios nsmutablearray init


【解决方案1】:

您不能在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];

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您不能首先插入,例如在索引 0 处然后在索引 2 处,您必须逐步插入到 0,1,2,3,4,5 .....,n 您想要做什么???你有什么问题???

        您可以尝试创建一个数组,然后用零项初始化它,然后插入它!!!我认为它会工作!!!

        【讨论】:

        • 如果我按顺序插入对象没有问题....但是如果我想先在 0 位置插入对象,然后在位置 2 或 3 插入对象,就会出现问题,好吗?上升是可以的,但随机不......你明白吗?
        猜你喜欢
        • 2012-08-15
        • 2011-03-08
        • 1970-01-01
        • 2011-04-26
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 2014-05-16
        • 2011-10-13
        相关资源
        最近更新 更多