Поскольку переменные вашего экземпляра self.arr1
, self.arr2
являются заполнителями для переменной типа NSArray
, но при их обновлении вы просто теряете старую ссылку, которая все еще остается в containerArray
.
Чтобы объяснить лучше:
self.arr1 <------ [NSArray array] (the first one you create)
тогда вы создаете contentArray
и получаете:
self.arr1 <--------------------------+-- [NSArray array] (first one you create)
|
[contentArray objectAtIndex:0] <-----+
после создания contentArray
и присвоения ему массивов у вас есть дублированные ссылки. self.arr1
будет указывать на тот же массив, на который указывает первый элемент contentArray
и т. Д. Для других.
Затем вы обновляете self.arr1 = [NSArray array]
новым массивом, поэтому вы получаете
self.arr1 <------------ [NSArray array] (new one created)
[contentArray objectAtIndex:0] <----- [NSArray array] (the old one)
Так что же случилось?
Вы создали новый массив и присвоили ему self.arr1
. Так что self.arr1
будет указывать на новый элемент, а [contentArray objectAtIndex:0]
будет по-прежнему ссылаться на старый. Каждая модификация self.arr1
не будет отражена на другой, потому что они НЕ того же объекта.
Это потому, что вы используете ссылки на объекты, а не на простые объекты. Когда вы присваиваете новый массив self.arr1
, вы не изменяете старый, а отбрасываете ссылку на него для нового, который заменяет старый.
Вот почему вы должны использовать NSMutableArray
: потому что в этом случае вы удалили бы / добавили элементы в тот же массив, не создавая новый.