2012-03-19 5 views
1

Если есть массив целых чиселКопирование массивов в массив массивов (да?)

array1 = {7,8,9}; 

и я добавить его в другой массив под названием 2darray.

Если я выпущу array1, у 2darray все равно будет 7,8,9 значений в нем или мне нужно будет сделать что-то вроде копирования, чтобы скопировать array1 в 2darray, а затем безопасно освободить массив1 и все еще иметь эти значения 7,8,9 в 2darray?

+0

Исходный массив все еще существует. Единственный способ «добавить» массив к другому массиву просто копирует массив, который копируется в массив. Все это основано на документации. –

+0

Я думаю, это зависит от того, как вы добавляете массив. Если вы добавите ссылку или указатель, то удаление массива1 повлияет на 2darray. Если вы сделаете глубокую копию, т. Е. Скопируете все элементы, то массив 1 не имеет значения. – Bill

+2

Вы имеете в виду 'NSArray's? Вы имеете в виду 'NSNumber' вместо« целых чисел »? В любом случае, я думаю, вы должны посмотреть руководства по управлению памятью для Objective-C. – mattjgalloway

ответ

2

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

Прежде всего, NSArray's может содержать только объекты, а не скалярные значения, такие как int в вашем коде. Давайте посмотрим на следующий код вместо:

NSArray *array1 = [NSArray arrayWithObjects:[NSNumber numberWithInt:7], 
              [NSNumber numberWithInt:8], 
              [NSNumber numberWithInt:9], nil]; 
NSArray *array2 = [NSArray arrayWithObject:array1]; 
[array1 release]; 
array1 = nil; 

При добавлении объекта в массив, он автоматически сохраняет его, так что в этом случае массив, который Array1 указывает на сохраняется после указателем (array1), а затем второй раз с помощью array2 (у него есть keepCount из 2).

Когда вы отпускаете его, он удаляет только ОДИН из удержаний (теперь значение сохраняется в кадре 1), поэтому сам объект никогда не отпускается и остается действительным.

Имейте в виду, что это довольно распространенный способ создания массива и добавления его на второе место. Вы «безопасно» освобождаете массив1 и можете установить его на ноль, не затрагивая объект, который все еще находится в массиве2.

+0

Спасибо. Именно то, что мне было интересно. –

Смежные вопросы