Я инициализирую два NSMutableArrays
, а именно:
NSMutableArray *firstArray = [[NSMutableArray alloc] init];
NSMutableArray *secondArray = [[NSMutableArray alloc] init];
firstArray
имеет в себе некоторые значения, и secondArray
также имеет некоторые значения.
Затем я назначил firstArray
на secondArray
:
firstArray = secondArray;
Теперь, если я внесу некоторые изменения в firstArray
, это также повлияет на secondArray
. Например, если я заменю или удалю значение по определенному индексу из firstArray
, то это значение также будет удалено из secondArray
.
Так есть ли способ, которым изменение в firstArray
не влияет на secondArray
?
4 ответа
Когда вы устанавливаете firstArray = secondArray;
, вы фактически устанавливаете их указатели на одно и то же значение, а не устанавливаете элементы в первом массиве такими же, как элементы во втором массиве. Это означает, что вы сделали firstArray
и secondArray
одним и тем же объектом, а не имели одинаковые значения. Если вы просто хотите иметь копию второго массива в первом, вам просто нужно указать это.
firstArray = [secondArray mutableCopy];
firstArray = [secondArray copy]; // non-mutable copy
Инициализируйте первый массив, используя инициализацию NSArray
.…
Я думаю, вы пытаетесь скопировать свои значения из fristArray в secondArray, это можно сделать, вызвав copy
или mutableCopy
firstArray = [secondArray copy];
Проблема, с которой вы столкнулись, заключается в том, что оба массива имеют ссылочный тип, а не значение, поэтому оба указывают на один и тот же адрес, поэтому, если вы измените значение одного, это повлияет на другой.
Инициализируйте первый массив, используя инициализацию initWithArray:copyItems:
.
NSArray *firstArray = [[NSArray alloc] initWithArray:secondArray copyItems:YES];
Попробуйте инициализировать оба массива следующим образом
NSMutableArray *firstArray = [[NSMutableArray alloc] init];
NSMutableArray *secondArray = [[NSMutableArray alloc] initWithArray:firstArray];
Надеюсь это поможет.
Похожие вопросы
Новые вопросы
objective-c
Этот тег следует использовать только для вопросов, касающихся функций Objective-C или зависящих от кода на языке. Теги [cocoa] и [cocoa-touch] следует использовать, чтобы узнать о фреймворках или классах Apple. Используйте связанные теги [ios], [macos], [apple-watch] и [tvos] для проблем, характерных для этих платформ.