我有以下代码......
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
当我从主数组中删除对象时,为什么要从主数组中删除它。
答案 0 :(得分:4)
tArray和mainArray是指针。并且它们在您的情况下引用相同的数组。你应该使用
NSMutableArray *tArray = [mainArray mutableCopy];
真正复制数组。
[[NSMutableArray alloc] init]
没有必要,因为结果将被丢弃。
答案 1 :(得分:2)
该行
tArray = mainArray;
将tArray设置为与mainArray完全相同的数组,它们指向内存中的同一个对象,因此当您对其中一个对象进行更改时,内存中的对象将被更改,并且指向它的所有实例都将看到该更改
如果你想拥有两个独立的对象,你应该复制数组。
答案 2 :(得分:1)
这一行
tArray = mainArray;
将mainArray
的引用复制到tArray
,这就是从数组tArray
和mainArray
中删除数据的原因。
尝试
tArray = [[NSmutableArray alloc] initWithArray:mainArray];
答案 3 :(得分:1)
这可以这样解释:
NSMutableArray *tArray = [[NSMutableArray alloc] init];
意味着创建了一个新对象
tArray - > [新对象]
tArray = mainArray;
暗示mainArray和tArray现在指的是同一个对象
tArray - > [主数组对象]< - mainArray
并且没有人提到[新对象],即非ARC也是内存泄漏。