removeObjectAtIndex:也是从主数组中删除数据并复制数组

时间:2014-04-15 07:34:00

标签: ios objective-c object nsmutablearray

我有以下代码......

NSMutableArray *tArray = [[NSMutableArray alloc] init];
tArray = mainArray;
[tArray removeObjectAtIndex:mainArray.count-1];

在mainArray中我有4个项目。

当我在代码上面运行时,我期待的是如下所示。

mainArray >> 4 items
tArray    >> 3 items

但是我得到的结果如下。

mainArray >> 3 items (this is WRONG)
tArray    >> 3 items

当我从主数组中删除对象时,为什么要从主数组中删除它。

4 个答案:

答案 0 :(得分:4)

tArray和mainArray是指针。并且它们在您的情况下引用相同的数组。你应该使用

NSMutableArray *tArray = [mainArray mutableCopy];

真正复制数组。

[[NSMutableArray alloc] init]

没有必要,因为结果将被丢弃。

答案 1 :(得分:2)

该行

tArray = mainArray;

将tArray设置为与mainArray完全相同的数组,它们指向内存中的同一个对象,因此当您对其中一个对象进行更改时,内存中的对象将被更改,并且指向它的所有实例都将看到该更改

如果你想拥有两个独立的对象,你应该复制数组。

答案 2 :(得分:1)

这一行

tArray = mainArray;

mainArray的引用复制到tArray,这就是从数组tArraymainArray中删除数据的原因。

尝试

tArray = [[NSmutableArray alloc] initWithArray:mainArray];

答案 3 :(得分:1)

这可以这样解释:

  1. NSMutableArray *tArray = [[NSMutableArray alloc] init];
    意味着创建了一个新对象 tArray - > [新对象]

  2. tArray = mainArray;
    暗示mainArray和tArray现在指的是同一个对象
    tArray - > [主数组对象]< - mainArray

  3. 并且没有人提到[新对象],即非ARC也是内存泄漏。