Я инициализирую два NSMutableArrays, а именно:

NSMutableArray *firstArray = [[NSMutableArray alloc] init];
NSMutableArray *secondArray = [[NSMutableArray alloc] init];

firstArray имеет в себе некоторые значения, и secondArray также имеет некоторые значения.

Затем я назначил firstArray на secondArray:

firstArray = secondArray;

Теперь, если я внесу некоторые изменения в firstArray, это также повлияет на secondArray. Например, если я заменю или удалю значение по определенному индексу из firstArray, то это значение также будет удалено из secondArray.

Так есть ли способ, которым изменение в firstArray не влияет на secondArray?

0
Naqi 7 Сен 2016 в 17:32

4 ответа

Лучший ответ

Когда вы устанавливаете firstArray = secondArray;, вы фактически устанавливаете их указатели на одно и то же значение, а не устанавливаете элементы в первом массиве такими же, как элементы во втором массиве. Это означает, что вы сделали firstArray и secondArray одним и тем же объектом, а не имели одинаковые значения. Если вы просто хотите иметь копию второго массива в первом, вам просто нужно указать это.

firstArray = [secondArray mutableCopy];
firstArray = [secondArray copy]; // non-mutable copy
2
Stonz2 8 Сен 2016 в 14:31

Инициализируйте первый массив, используя инициализацию NSArray.…

Я думаю, вы пытаетесь скопировать свои значения из fristArray в secondArray, это можно сделать, вызвав copy или mutableCopy

firstArray = [secondArray copy];
2
Pavel Gatilov 7 Сен 2016 в 14:39

Проблема, с которой вы столкнулись, заключается в том, что оба массива имеют ссылочный тип, а не значение, поэтому оба указывают на один и тот же адрес, поэтому, если вы измените значение одного, это повлияет на другой.

Инициализируйте первый массив, используя инициализацию initWithArray:copyItems:.

NSArray *firstArray = [[NSArray alloc] initWithArray:secondArray copyItems:YES];
1
Nirav D 7 Сен 2016 в 14:41

Попробуйте инициализировать оба массива следующим образом

NSMutableArray *firstArray = [[NSMutableArray alloc] init];

NSMutableArray *secondArray = [[NSMutableArray alloc] initWithArray:firstArray];

Надеюсь это поможет.

0
nishith Singh 7 Сен 2016 в 14:37