Как сделать глубокую копию свойства NSMutableArray пользовательского объекта

У меня есть CustomObject (типа NSObject), имеющий свойство NSMutableArray. Это свойство содержит объекты NSDictionary. Мне нужна глубокая копия только свойства, чтобы разрешить редактирование в другом контроллере представления; после редактирования я хочу заменить исходное свойство отредактированным глубоко скопированным свойством.

Мой вопрос:

  • Нужно ли делать глубокий 'copyWithZone'?
  • и если да, то как мне это реализовать, учитывая, что это всего лишь одно свойство, требующее глубокого копирования?

На данный момент я обошел это, выполнив:

NSMutableArray *deepCopyArray = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:<CustomObject>instance.<propertyToDeepCopy>]]];

Хотя это работает, поскольку NSMutableArray и NSDictionary реализуют NSCoding, это не кажется правильным, или нет? Пожалуйста, помогите :)


person King David    schedule 01.09.2015    source источник


Ответы (1)


Это приемлемый способ с множеством достоинств:

  1. Оно работает
  2. Это просто и очевидно
  3. Это очень мало кода
  4. Он самодостаточен и поэтому его легко изменить в будущем.

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

  1. Вы знаете, что действительно неизменно, и можете избежать копирования
  2. Вам нужны изменяемые контейнеры (словари в массиве

Хотя даже в некоторых из этих случаев вы захотите запустить аналогичный процесс на основе архива, просто используя вместо этого список свойств (так что вы продолжаете писать минимальный код и использовать предоставленные SDK).

person Wain    schedule 01.09.2015