Принятие NSCoding
, безусловно, вариант - в основном, все элементы вашего графа должны знать, как самим сериализовать / десериализоваться (приняв NSCoding
). При таком подходе вы будете использовать NSCoder
интерфейсы для архивирования и разархивирования.
Еще одна распространенная альтернатива - список свойств. Это более простой и переносимый формат с некоторыми ограничениями на типы. А именно, NSString
, NSArray
, NSDictionary
, NSNumber
(и CFBoolean
), NSData
и NSDate
- а также их аналоги CoreFoundation. Эти типы и коллекции знают, как правильно сериализовать свои элементы. Здесь вы можете использовать NSPropertyListSerialization
для архивирования и разархивирования. Это не слишком много для небольших задач, но NSCoding
, как правило, является лучшим долгосрочным решением, где переносимость не имеет значения (например, экспорт в XML), поскольку объекты могут поддерживать свои реализации сериализации без особого вмешательства со стороны архиватора.
Для пользовательских объектов обычно поддерживается представление списка свойств и / или NSCoding
- но типы коллекций уже знают, как архивировать и разархивировать себя (при условии, что их содержимое также поддерживает подход к сериализации, который вы используете) .
Более подробную информацию можно найти в Apple * Руководство по программированию архивов и сериализаций .