从NSMutableArray中删除对象时出现的奇怪问题

时间:2013-12-28 09:16:58

标签: ios objective-c foundation

我用4个对象初始化NSMutableArray。然后我在第一个索引之后再添加2个对象。然后我删除了两个新添加的对象。从理论上可以清楚地看到,在所有操作之后,我将获得我首先创建的原始数组,但在删除对象后,我得到了奇怪的结果。

代码: -

- (void)viewDidLoad
{
    [super viewDidLoad];
   NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4", nil];

    for (NSString *str in arr)
    {
        NSLog(@"%@",str);
    }

    [arr insertObject:@"1.1" atIndex:1];
    [arr insertObject:@"1.2" atIndex:2];

    for (NSString *str in arr)
    {
        NSLog(@"New %@",str);
    }

    [arr removeObjectAtIndex:1];
    [arr removeObjectAtIndex:2];

    for (NSString *str in arr)
    {
        NSLog(@"Old %@",str);
    }
}

输出: -

2013-12-28 14:42:02.703 ArrayDemo[1687:11303] 1
2013-12-28 14:42:02.704 ArrayDemo[1687:11303] 2
2013-12-28 14:42:02.705 ArrayDemo[1687:11303] 3
2013-12-28 14:42:02.705 ArrayDemo[1687:11303] 4
2013-12-28 14:42:02.705 ArrayDemo[1687:11303] New 1
2013-12-28 14:42:02.706 ArrayDemo[1687:11303] New 1.1
2013-12-28 14:42:02.706 ArrayDemo[1687:11303] New 1.2
2013-12-28 14:42:02.706 ArrayDemo[1687:11303] New 2
2013-12-28 14:42:02.707 ArrayDemo[1687:11303] New 3
2013-12-28 14:42:02.707 ArrayDemo[1687:11303] New 4
2013-12-28 14:42:02.708 ArrayDemo[1687:11303] Old 1
2013-12-28 14:42:02.708 ArrayDemo[1687:11303] Old 1.2
2013-12-28 14:42:02.709 ArrayDemo[1687:11303] Old 3
2013-12-28 14:42:02.710 ArrayDemo[1687:11303] Old 4

我无法理解为什么会这样?有人知道吗? 任何帮助将不胜感激......

提前致谢....

1 个答案:

答案 0 :(得分:2)

初始数组:

    1, 2, 3, 4

[arr insertObject:@"1.1" atIndex:1]之后:

    1, 1.1, 2, 3, 4

[arr insertObject:@"1.2" atIndex:2]之后:

    1, 1.1, 1.2, 2, 3, 4

[arr removeObjectAtIndex:1]之后:

    1, 1.2, 2, 3, 4

[arr removeObjectAtIndex:2]之后

    1, 1.2, 3, 4

所以一切都是正确的。如果要删除那些元素 您之前插入,然后您必须以相反的顺序删除它们:

[arr removeObjectAtIndex:2];
[arr removeObjectAtIndex:1];

在这种情况下,最终结果将是1, 2, 3, 4