Основной вопрос о массивах iPhone Object C и Deep and Pointer Copy - PullRequest
0 голосов
/ 16 апреля 2011

Я новичок в пространстве iPhone / Mac, и это, вероятно, довольно простой вопрос, я провел некоторый поиск и не нашел прямого ответа.

Я хотел бы знать, выполняет ли метод addObject для Arrays / Mutable Arrays поверхностный (только указатель) или глубокий (копирует объект) при добавлении.

  1. Изменяемый массив, который был выделен
  2. Строка NSString, которая была выделена с некоторой инициализацией
  3. Мы добавилиОбъектить строку в изменяемый массив
  4. Затем мы освобождаем строку NSString

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

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

При добавлении объекта в массив его счет сохранения будет увеличен. Объект будет освобожден, когда его счетчик сохранений будет равен 0. Поэтому при добавлении NSString к вам anArray он не будет копией (вы можете изменить foo, и он будет изменен также в массиве), но это увеличит счет сохранения foo на 1.

NSString *foo = [[NSString alloc] initWithString@"bar"]; // retain count +1
[anArray addObject:foo]; // NOT COPIED, but retain count of 'foo' increased by 1
[foo release]; // retain count of foo decreased by 1

Когда вы в какой-то момент времени выпускаете anArray, он будет вызывать release для своих объектов. Таким образом, число сохраненных foo, наконец, станет 0, и foo будет освобожден.

// some time later..
[anArray release]; // anArray released, foo retain count = 0.. foo gets released.

С уважением, Christian

2 голосов
/ 16 апреля 2011

addObject: делает мелкую копию. Что вам не хватает, так это то, что NSMutableArray сохраняет объект, поэтому он не исчезает, но не требует глубокого копирования. Это ключевой момент в управлении памятью Objective-C. Вам следует прочитать Руководство по программированию управления памятью . Управление памятью какао не сложное и невероятно последовательное. У меня сокращенное резюме на Три Волшебных Слова .

...