Заменить массив на массив - PullRequest
0 голосов
/ 15 июня 2010

У меня есть и NSMutableArray, и я хочу заменить его другим, но если я попытаюсь сделать это следующим образом ...

firstArray = secondArray;

... тогда, кажется, стереть весь firstArrayполучите это сообщение об ошибке ..

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

... и границы должны быть (6), а не (0).

Есть ли правильный способ заменить массив?

PS: я уже проверил secondArray, и он работает нормально.

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Если вы хотите превратить переменную firstArray в ссылку на секунду, сделайте следующее:

[firstArray release];
firstArray = [secondArray retain];

Если вы хотите сделать firstArray копию второй, выполните:

[firstArray release];
firstArray = [secondArray mutableCopy];

(В обоих случаях release предполагает, что вы выделили массив или ранее retain -ed или copy -ed. Если нет, вы можете пропустить этот бит. В любом случае вы делаетевладеете новым массивом и должны release его в соответствующее время.)

Если вы хотите заменить содержимое первого массива на содержимое второго (что не сильно отличается в результате от принятиякопировать, но требует меньше уничтожения и создания объекта), тогда я думаю, вам придется сделать что-то вроде этого:

[firstArray removeAllObjects];
[firstArray addObjectsFromArray:secondArray];
0 голосов
/ 15 июня 2010

Вы назначаете указатель firstArray указателю secondArray, поэтому теряете ссылку на объект firstArray, и он становится утечкой. Если вы хотите заменить объекты в объекте firstArray, используйте что-то вроде -replaceObjectsInRange:withObjectsFromArray: или просто -release объект firstArray и присвойте firstArray [secondArray mutableCopy].

Я рекомендую ознакомиться с указателями C, а также правилами управления памятью Objective-C, чтобы убедиться, что вы хорошо разбираетесь в основах.

...