2015-09-01 2 views
2

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

Мой вопрос:

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

Я сейчас обходили это, выполнив:

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

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

ответ

0

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

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

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

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

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

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