Когда вы используете encodeWithCoder: и initWithCoder: на iPhone? - PullRequest
8 голосов
/ 01 мая 2009

Как показывает мой вопрос в вышеприведенной теме, каким требованиям вы обычно должны отвечать, чтобы сказать: «Хорошо, для этого мне нужно создать экземпляр encodeWithCoder: и initWithCoder:»? Обычно вы можете записать состояние объекта в NSUserDefaults, поэтому мне интересно, когда вы, эксперты, решите использовать одно против другого?

Ответы [ 4 ]

10 голосов
/ 01 мая 2009

initWithCoder: используется ОС при отмене архивирования файлов XIB; если вы посмотрите внимательно, вы увидите, что initWithFrame: не вызывается для представлений, которые вы создаете в своей XIB; вместо этого им будет звонить initWithCoder:.

9 голосов
/ 01 мая 2009

Пользовательские настройки по умолчанию - это список свойств. Списки свойств аналогичны JSON и могут хранить только определенные типы данных - NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. Если вы попытаетесь сохранить что-либо еще по умолчанию для пользователя, вы получите исключение. Списки свойств также не могут обрабатывать произвольные графы объектов, только деревья.

Вы всегда можете взять свое пользовательское состояние и преобразовать его в структуру данных, совместимую со списком свойств, а затем сохранить ее по умолчанию; но затем вы в основном реализуете механизм сериализации объектов, и вы также можете использовать более мощный механизм, уже предоставленный NSArchiver.

6 голосов
/ 01 мая 2009

NSCoder - это стандартный метод какао для реализации сериализации. См. Apple Руководство по программированию архивов и сериализаций для какао для получения подробной информации.

1 голос
/ 01 мая 2009

Я использую NSCoder всякий раз, когда у меня есть какие-то сложные данные для хранения, которые мне никогда не придется редактировать вручную. Например, мое приложение Converter хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults.

...